如何从分隔字符串列表中获取不同的列表
How to get a distinct list from a list of delimited strings
我有一个分隔字符串列表,我需要得到一个不同的拆分字符串列表。
例如
在:{ "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 查询中从 delimetedThings
获取 things
?
通过使用 SelectMany()
来展平嵌套列表
var things = delimitedThings.SelectMany(x => x.Split(';')).Distinct();
您希望有效地将 "sequence of sequences" 扁平化为单个序列 - 这就是 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
调用是有指导意义的.
我有一个分隔字符串列表,我需要得到一个不同的拆分字符串列表。
例如
在:{ "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 查询中从 delimetedThings
获取 things
?
通过使用 SelectMany()
来展平嵌套列表
var things = delimitedThings.SelectMany(x => x.Split(';')).Distinct();
您希望有效地将 "sequence of sequences" 扁平化为单个序列 - 这就是 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
调用是有指导意义的.