如何从定界字符串列表中获得一个独特的列表

时间:2018-09-04 10:30:12

标签: c# linq distinct-values generic-collections

我有一个定界字符串列表,我需要获得一个分开的分裂字符串列表。

例如

在:{ "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

2 个答案:

答案 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>