使用Linq基于列表内容将列表拆分为子列表

时间:2013-08-09 21:52:37

标签: c# linq data-structures

这类似,但不完全是question

中提出的问题

我有一个列表,我想打破子列表,但中断是根据条目的内容而不是固定大小发生的。

原始列表= [ split,1,split,2,2,split,3,3,3 ]

变为[split,1][split,2,2][split,3,3,3][1][2,2][3,3,3]

2 个答案:

答案 0 :(得分:2)

也许?

var list = new List<int>() { 1, 2, 0, 3, 4, 5, 0, 6 };
var subLists = list.Split(0).ToList();

IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, T divider)
{
    var temp = new List<T>();
    foreach (var item in list)
    {
        if (!item.Equals(divider))
        {
            temp.Add(item);
        }
        else
        {
            yield return temp;
            temp = new List<T>();
        }
    }

    if (temp.Count > 0) yield return temp;
}

答案 1 :(得分:0)

简单的foreach比linq方法更合适和可读:

var originalList = new List<string>(){"split","1","split","2","2","split","3","3","3"};
var result = new List<List<string>>();
List<string> subList = new List<string>();
foreach(string str in originalList)
{
    if(str=="split")
    {
        subList = new List<string>();
        result.Add(subList);
    }
    subList.Add(str);
}

Demo