如何从分隔字符串列表中获取不同的列表

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 调用是有指导意义的.