C#Linq - 在字典中提取列表成员

时间:2017-07-28 02:17:45

标签: c# linq generic-collections

我有一个像这样的字典的用例

var foo = new Dictionary<string, List<string>>()

所以这个集合将保存一些像这样的分层数据

  • 关键1
    • 价值1
    • 价值2
  • 键2
    • 价值3

我需要得到\项目忽略键的值列表,因此结果将是

  • 价值1
  • 价值2
  • 价值3

第一次尝试我想出了这个

IReadOnlyList<string> bar = foo.Select(r => r.Value.Select(x => x.ToString()))
                             .Select(r => r.ToString())
                             .ToList();

这有什么好处吗?

2 个答案:

答案 0 :(得分:3)

使用SelectMany

foo.SelectMany(x => x.Value).ToList();

答案 1 :(得分:0)

请注意,Dictionary已经通过其Values属性提供了一种O(1)方式来访问其值列表(与您可以访问其键列表相同)

  

中的值的顺序   Dictionary.ValueCollection未指定,但它是   与相关键相同的顺序   Keys属性返回的Dictionary.KeyCollection。

     

返回的Dictionary.ValueCollection不是静态的   复制;相反,Dictionary.ValueCollection引用   回到原始字典中的值。   因此,对词典的更改仍然存在   反映在Dictionary.ValueCollection。

     

获取此属性的值是O(1)操作。

https://msdn.microsoft.com/en-us/library/ekcfxy3x(v=vs.110).aspx