如何将对象数组拆分为给定大小的多个子数组

时间:2014-07-03 13:26:02

标签: vb.net linq

我想将一个对象数组拆分成多个数组,其中包含的元素不超过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())

但这并没有给出相同的结果,即使看起来应该如此。

显然这只是一个例子,我真的希望它能够处理一系列海关对象。 (加分点:为什么这两个例子不等同?)。

2 个答案:

答案 0 :(得分:4)

在C#中,您有整数除法,这意味着小数位被截断,结果也是int。这就是为什么它在C#中工作而不是在VB.NET中维护小数位的原因,因为它将它转换为Double

如果您想在VB.NET中使用相同的行为,则需要使用\而不是/

请参阅:\ Operator (Visual Basic)

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;
        }