我有一个分隔字符串列表,我需要获得一个不同的拆分字符串列表。
EG
在:{ "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
?
您希望将“序列序列”有效地压缩为单个序列 - 这就是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
调用是有益的。
通过使用fazns嵌套列表的SelectMany()
var things = delimitedThings.SelectMany(x => x.Split(';')).Distinct();