1
的名单,我有以下的产品清单。拆分列表分为水平分组的子清单
List: [Item 1, Item 2, Item 3, Item 4, Item 5, Item 6, Item 7, Item 8, Item 9]
我需要以下的输出:
List 1: [Item 1, Item 4, Item 7]
List 2: [Item 2, Item 5, Item 8]
List 3: [Item 3, Item 6, Item 9]
经过一番研究,我“想出了”用如下:
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int parts)
{
var list = new List<T>(source);
int defaultSize = (int)((double)list.Count/(double)parts);
int offset = list.Count % parts;
int position = 0;
for (int i = 0; i < parts; i++)
{
int size = defaultSize;
if (i < offset)
size++;
yield return list.GetRange(position, size);
position += size;
}
}
这个工程,但垂直分布的项目,我需要水平分散。
想法?谢谢!
===== UPDATE ====
在情况下在源计数不受零件均匀地划分,这样的结果必须是像这样:
List 1: [Item 1, Item 5, Item 9]
List 2: [Item 2, Item 6, Item 10]
List 3: [Item 3, Item 7]
List 4: [Item 4, Item 8]
当源中的计数没有被部分均分时,会发生什么?哪个列表应该有额外的部分?或者该项目是否应该从结果列表中截断? – maccettura
好问题。查看更新:-) – Corstiaan