2017-07-28 37 views
0

中提取成員我有這樣一個C#的LINQ - 列表的字典

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(); 

這是什麼好?

+0

有或沒​​有重複? –

+0

與重複項目 – ambidexterous

回答

3

使用SelectMany

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

注意,字典已經提供了一個O(1)的方式來訪問它的值的列表,經由其價值屬性(你一樣可以訪問它的鍵列表)

Dictionary.ValueCollection中的值的順序未指定,但與Keys屬性返回的 Dictionary.KeyCollection中的關聯密鑰的順序相同,順序與 相同。

返回的Dictionary.ValueCollection不是靜態的 副本;相反,Dictionary.ValueCollection將 返回到原始字典中的值。 因此,Dictionary中的更改仍然是 反映在Dictionary.ValueCollection中。

獲取此屬性的值是O(1)操作。

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

+0

對!因此,重複George和Marcin的答案,它可能更適合於這個 foo.Values.SelectMany(x => x).ToList() – ambidexterous

+0

您是否看到過https://msdn.microsoft.com/zh-cn/ -us/library/bb534336(v = vs.110).aspx - 可能Marcin的建議更有效,因爲他們也使用那個 –