簡體   English   中英

將列表拆分為水平分組的子列表列表

[英]Split list into list of horizontally grouped sub lists

我有以下項目清單:

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]

會這樣嗎?

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();
    }
}

工作?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM