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