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

时间:2011-09-26 13:19:44

标签: c# list dictionary

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

这里是代码:

Dictionary<string, List<MyType>> myDico = GetDictionary();
List<MyType> items = ???

我试试:

List<MyType> items = new List<MyType>(myDico.values)

但它不起作用: - (

10 个答案:

答案 0 :(得分:77)

怎么样:

var values = myDico.Values.ToList();

答案 1 :(得分:48)

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

如果您想平展列表,请使用Linq

var items = myDico.SelectMany (d => d.Value).ToList();

答案 2 :(得分:25)

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

List<MyType> allItems = myDico.Values.SelectMany(c => c).ToList();

答案 3 :(得分:25)

另一种变体:

    List<MyType> items = new List<MyType>();
    items.AddRange(myDico.values);

答案 4 :(得分:7)

我的OneLiner:

var MyList = new List<MyType>(MyDico.Values);

答案 5 :(得分:1)

进一步回答Slaks的答案,如果你的字典中的一个或多个列表为空,则在调用System.NullReferenceException时会抛出ToList(),安全地播放:

List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList();

答案 6 :(得分:0)

使用此:

List<MyType> items = new List<MyType>()
foreach(var value in myDico.Values)
    items.AddRange(value);

问题是词典中的每个键都有一个实例列表作为值。如果每个键只有一个实例作为值,那么您的代码将起作用,如下例所示:

Dictionary<string, MyType> myDico = GetDictionary();
List<MyType> items = new List<MyType>(myDico.Values);

答案 7 :(得分:0)

        List<String> objListColor = new List<String>() { "Red", "Blue", "Green", "Yellow" };
        List<String> objListDirection = new List<String>() { "East", "West", "North", "South" };

        Dictionary<String, List<String>> objDicRes = new Dictionary<String, List<String>>();
        objDicRes.Add("Color", objListColor);
        objDicRes.Add("Direction", objListDirection);

答案 8 :(得分:0)

您还可以使用另一种变体

MyType[] Temp = new MyType[myDico.Count];
myDico.Values.CopyTo(Temp, 0);
List<MyType> items = Temp.ToList();

答案 9 :(得分:0)

Dictionary<string, MyType> myDico = GetDictionary();

var items = myDico.Select(d=> d.Value).ToList();