1

这是相似的,但不完全是这个问题所问的

我有一个要拆分为子列表的列表,但是拆分是基于条目的内容而不是固定大小的。

原始清单 =[ split,1,split,2,2,split,3,3,3 ]

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

4

2 回答 2

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;
}
于 2013-08-09T22:01:13.063 回答
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);
}

演示

于 2013-08-09T22:04:55.010 回答