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

问题描述 投票:0回答:2

我有一个分隔字符串列表,我需要获得一个不同的拆分字符串列表。

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

c# linq distinct-values generic-collections
2个回答
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调用是有益的。


2
投票

通过使用fazns嵌套列表的SelectMany()

var things = delimitedThings.SelectMany(x => x.Split(';')).Distinct();
© www.soinside.com 2019 - 2024. All rights reserved.