我想将一个对象数组拆分成多个数组,其中包含的元素不超过10个。
花了很长时间看一些例子,我能找到的最接近的是C#:
Enumerable.Range(0, 100).Select((Value, Index) => new {Value, Index})
.GroupBy(p => p.Index/10)
.Select(g => g.Select(p => p.Value).ToList())
这在LinqPad中运行并运行,因此我尝试将其转换为VB.Net:
Enumerable.Range(0, 100).Select(Function(Value, Index) New With {Value, Index}) _
.GroupBy(Function(x) x.Index / 10) _
.Select(Function(g) g.Select(Function(p) p.Value).ToList())
但这并没有给出相同的结果,即使看起来应该如此。
显然这只是一个例子,我真的希望它能够处理一系列海关对象。 (加分点:为什么这两个例子不等同?)。
答案 0 :(得分:4)
在C#中,您有整数除法,这意味着小数位被截断,结果也是int
。这就是为什么它在C#中工作而不是在VB.NET中维护小数位的原因,因为它将它转换为Double
。
如果您想在VB.NET中使用相同的行为,则需要使用\
而不是/
。
Enumerable.Range(0, 100).Select(Function(Value, Index) New With {Value, Index}) _
.GroupBy(Function(x) x.Index \ 10) _
.Select(Function(g) g.Select(Function(p) p.Value).ToList())
答案 1 :(得分:-1)
其他明智的尝试以下
int currentPosition = 0;
int maxArrayLimit = 10;
//Total values 0-103
List<int> lstNumbers = Enumerable.Range(0, 103).Select(x => x).ToList<int>();
//to hold splited values
List<List<int>> lstSplitedNumbers = new List<List<int>>();
while (currentPosition < lstNumbers.Count)
{
//spliting values based on currentPosition to maxArrayLimit
List<int> lstCurrentNumbers = lstNumbers.Skip(currentPosition).Take(maxArrayLimit).ToList<int>();
lstSplitedNumbers.Add(lstCurrentNumbers);
//rest the current position
currentPosition += lstCurrentNumbers.Count;
}