如何将字典值作为通用列表

Flo*_*ian 54 c# dictionary list

我只想从字典值中获取一个列表,但它并不像看起来那么简单!

这里的代码:

Dictionary<string, List<MyType>> myDico = GetDictionary();
List<MyType> items = ???
Run Code Online (Sandbox Code Playgroud)

我尝试:

List<MyType> items = new List<MyType>(myDico.values)
Run Code Online (Sandbox Code Playgroud)

但它不起作用:-(

Sli*_*ead 89

怎么样:

var values = myDico.Values.ToList();
Run Code Online (Sandbox Code Playgroud)

  • 为什么这不会得到更多的赞成? (9认同)
  • @ J.Chang,这并没有使值变平,所以使用`dic.Values.ToList()`你将生成`List <List <MyType >>`而不是flatten List.这仅对每个键上的单个值有效. (8认同)

Vde*_*edT 49

当然,myDico.Values是List<List<MyType>>.

如果要平展列表,请使用Linq

var items = myDico.SelectMany (d => d.Value).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 实际上,`Values`的类型是`Dictionary <string,List <MyType >> .ValueCollection`. (8认同)
  • 有谁知道为什么这样实现?让myDico.Values返回List <List <MyType >>比在Java中更有意义 - 或者我错过了什么? (3认同)

SLa*_*aks 26

您可能希望将所有列表展平Values为一个列表:

List<MyType> allItems = myDico.Values.SelectMany(c => c).ToList();
Run Code Online (Sandbox Code Playgroud)


小智 26

另一个变种:

    List<MyType> items = new List<MyType>();
    items.AddRange(myDico.values);
Run Code Online (Sandbox Code Playgroud)

  • 很高兴看到你可以在没有真正阅读问题的情况下获得多少赞成票.虽然你回答了我来到这里时遇到的问题,但是OP实际上还问了其他问题(`Dictionary`包含`List`s). (5认同)

小智 9

我的OneLiner:

var MyList = new List<MyType>(MyDico.Values);
Run Code Online (Sandbox Code Playgroud)

  • 由OP指定,"它不起作用". (3认同)
  • 对我来说很好用!谢谢。 (2认同)
  • 我猜这不会将字典中的列表压缩成一个列表. (2认同)