这类似,但不完全是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]
答案 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);
}