我有一个程序,将创建一堆订单。但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。
你知道吗?
2条答案
按热度按时间qlckcl4x1#
你的问题我不是很清楚,但我相信你有一个数组,里面有几个“对象”,对吗?在此之前,你想把这个矩阵分成更小的矩阵,对吗?
那么,如何将这个较大的矩阵传递给JSON,创建一个将由较小值填充的对象 然后将这个JSON再次转换为上述类型的对象,再将这些对象传递给较小的数组,您明白吗?
brjng4g32#
如果您可以访问Net 7.0,也许您正在寻找Enumerable.Chunk?
Splits the elements of a sequence into chunks of size at most size.