这是相似的,但不完全是这个问题所问的
我有一个要拆分为子列表的列表,但是拆分是基于条目的内容而不是固定大小的。
原始清单 =[ split,1,split,2,2,split,3,3,3 ]
变成[split,1]
, [split,2,2]
,[split,3,3,3]
或[1]
, [2,2]
,[3,3,3]
这是相似的,但不完全是这个问题所问的
我有一个要拆分为子列表的列表,但是拆分是基于条目的内容而不是固定大小的。
原始清单 =[ split,1,split,2,2,split,3,3,3 ]
变成[split,1]
, [split,2,2]
,[split,3,3,3]
或[1]
, [2,2]
,[3,3,3]
也许?
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;
}
一个简单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);
}