【发布时间】:2012-11-21 21:47:44
【问题描述】:
我想将一个列表分成几部分,不知道该列表中有多少项目。这个问题与那些想将列表拆分成固定大小的块的人不同。
int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
我希望将值垂直拆分。
一分为二:
-------------------
| item 1 | item 6 |
| item 2 | item 7 |
| item 3 | item 8 |
| item 4 | item 9 |
| item 5 | |
一分为三:
| item 1 | item 4 | item 7 |
| item 2 | item 5 | item 8 |
| item 3 | item 6 | item 9 |
一分为四:
| item 1 | item 4 | item 6 | item 8 |
| item 2 | item 5 | item 7 | item 9 |
| item 3 | | | |
我发现了一些可以做到这一点的 c# 扩展,但它并没有按照我想要的方式分配价值。这是我发现的:
// this technic is an horizontal distribution
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts)
{
int i = 0;
var splits = from item in list
group item by i++ % parts into part
select part.AsEnumerable();
return splits;
}
结果是这样,但我的问题是值是水平分布的:
| item 1 | item 2 |
| item 3 | item 4 |
| item 5 | item 6 |
| item 7 | item 8 |
| item 9 | |
或
| item 1 | item 2 | item 3 |
| item 4 | item 5 | item 6 |
| item 7 | item 8 | item 9 |
知道如何垂直分配我的价值观并有可能选择我想要的部分数量吗?
现实生活中
对于那些想知道我想在哪种情况下垂直拆分列表的人,这里是我网站部分的屏幕截图:
【问题讨论】:
-
所以你希望前半部分在一个列表中,后半部分在另一个列表中。您知道列表中有多少元素...也许您可以尝试创建一个列表并将前半部分元素插入到该新列表中...嗯...
-
var list1 = a.Take(a.Length / 2).ToList(); var list2 = a.Skip(list1.Count).ToList(); -
您是要拆分为 2 个相等(相似)长度的列表、固定页面长度还是按内容值拆分?您还在寻找处理无限集合或固定集合的能力吗? (显然不可能将无限集一分为二)
-
@MatthewWhited 我想分成 2 个相同长度的列表。我已经更新了我的问题以更准确地显示我想要的内容。
-
@Oliver 乍一看似乎如此,但 OP 想要的结果与该问题不同,例如 this question。