我想将一个列表分成若干部分,不知道在列表中会有多少项。这个问题不同于那些想要将列表分成固定大小块的人。
int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
我希望值能够垂直分割。
分为2个:
-------------------
| 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 |
分成4个部分:
| 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();
- Ilia G