【问题标题】:How to get a distinct list from a list of delimited strings如何从分隔字符串列表中获取不同的列表
【发布时间】:2019-02-09 08:44:44
【问题描述】:

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

例如

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

【问题讨论】:

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


    【解决方案1】:

    您希望有效地将“序列序列”扁平化为单个序列 - 这就是 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 调用是很有启发性的。

    【讨论】:

    • @fubo 领先你 19 秒!
    • @Shevek:我试图提供更完整和解释性的答案:)
    【解决方案2】:

    通过使用 SelectMany() 来展开嵌套列表

    var things = delimitedThings.SelectMany(x => x.Split(';')).Distinct();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多