linq 是否有更好的方法将阵列拆分为更小的阵列?

jgovgodb  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(117)

我有一个程序,将创建一堆订单。但API有限制,如果我想这样做,我必须这样做10一次

If orderList.Count > 10 Then
    Dim FirstTwenty = From n In orderList Take (10)
    Dim theRest = From n In orderList Skip (10)
    Dim result1 = Await internalActualcreateNormalLimitOrderMultiple(FirstTwenty.ToArray)
    Dim result2 = Await internalActualcreateNormalLimitOrderMultiple(theRest.ToArray)
    Return result1 + result2 'no longer json but we don't really use the resulting json unless for debugging
End If

基本上我想把{1,2,3,4,5,6,7,8,9,10.11.12,...}拆分成{1,2,3}{4,5,6}{7,8,9},...
我想知道是否可以使用linq而不是for
所以我用了这个递归函数,先得到10个或者20个,然后递归调用这个函数,以此类推。
我看了一下,虽然它很简单,但看起来不太对,显然订单的数量不会很大,最多15个,但是如果有一天我有100个呢?我可能会得到像stackoverflow这样的递归的东西。
如果有一个函数可以使用linq、where、take和skip将数组拆分成数组,那就太好了。
当然我可以为每一个做但也许有一个更优雅的方式?
然后我写了另一个代码

Public Shared Function splitArrayIntoSmallerArrays(Of someObject)(arrayOfSomeObject As someObject(), chunkSize As Integer) As List(Of someObject())
    Dim output = New List(Of someObject())
    Dim newestArray = New List(Of someObject)
    For i = 0 To arrayOfSomeObject.Count - 1

        newestArray.Add(arrayOfSomeObject(i))
        If newestArray.Count = chunkSize Then
            output.Add(newestArray.ToArray)
            newestArray = New List(Of someObject)
        End If
    Next
    output.Add(newestArray.ToArray)
    Return output
End Function

时间复杂度O(n)
但是我认为可以用linq、seek和take来更简单地完成,但是我不知道怎么做。或者可以用group by。
你知道吗?

qlckcl4x

qlckcl4x1#

你的问题我不是很清楚,但我相信你有一个数组,里面有几个“对象”,对吗?在此之前,你想把这个矩阵分成更小的矩阵,对吗?
那么,如何将这个较大的矩阵传递给JSON,创建一个将由较小值填充的对象 然后将这个JSON再次转换为上述类型的对象,再将这些对象传递给较小的数组,您明白吗?

brjng4g3

brjng4g32#

如果您可以访问Net 7.0,也许您正在寻找Enumerable.Chunk
Splits the elements of a sequence into chunks of size at most size.

相关问题