我有以下项目清单:
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;
}
}
这可以工作,但是垂直分配物品,我需要水平展开。
思想?谢谢!
=====更新====
如果源中的计数未按部分均分,则此结果必须如此:
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]
答案 0 :(得分:3)
这会是
吗?public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int parts)
{
var list = new List<T>(source);
foreach (var group in list.GroupBy(x => list.IndexOf(x) % parts))
{
yield return group.ToList();
}
}
工作?