我有一个定界字符串列表,我需要获得一个分开的分裂字符串列表。
例如
在:{ "thing 1;thing 2", "thing 2;thing 3", "thing 3;thing 4" }
出{ "thing 1", "thing 2", "thing 3", "thing 4" }
这是我到目前为止所拥有的:
var delimitedThings = new List<string> { "thing 1;thing 2", "thing 2;thing 3", "thing 3;thing 4" };
var duplicatedThings = new List<string>();
foreach (var t in delimitedThings)
{
duplicatedThings.AddRange(t.Split(';'));
}
var things = duplicatedThings.Distinct();
哪种方法有效,但是有没有办法在单个LINQ查询中从things
获取delimetedThings
?
答案 0 :(得分:2)
通过使用SelectMany()
展平嵌套列表
var things = delimitedThings.SelectMany(x => x.Split(';')).Distinct();
答案 1 :(得分:2)
您正在寻求有效地将“序列序列”展平为单个序列-这就是SelectMany
的目的。因此您的代码可以写为:
var things = delimitedThings.SelectMany(t => t.Split(';'))
.Distinct();
或查询表达式:
var things = (from item in delimitedThings
from thing in item.Split(';'))
select thing).Distinct();
在这种情况下,我当然不会使用查询表达式,但是知道将查询表达式中的第二个(及后续)from
子句转换为SelectMany
调用是有益的。 / p>