'将'Dictionary <string,int>转换为List <object> </object> </string,int>

时间:2012-07-13 12:14:43

标签: c# .net linq

我有一个Dictionary<string,int> dictionary1,我需要将其转换为List<Data>,其中Data具有属性lable = dictionary1.key和value = dictionary1 。值。我不想使用for / foreach循环(由我自己编写),因为为了避免它我试图使用字典。

另一种选择是拥有两个不同的词典(dictionary2和dictionary3),dictionary2<string,keyOfDictionary1>dictionary3<string,valueOfDictionary1>

我有道理吗?那可能吗?有更好的选择吗?

9 个答案:

答案 0 :(得分:16)

假设:

class Data
{
    public string Label { get; set; }

    public int Value { get; set; }
}

然后:

Dictionary<string, int> dic;
List<Data> list = dic.Select(p => new Data { Label = p.Key, Value = p.Value }).ToList();

答案 1 :(得分:5)

也许您可以使用LINQ?

dictionary1.Select(p => new Data(p.Key, p.Value)).ToList()

然而,这是使用yield,因此在后台循环...

答案 2 :(得分:4)

myDictionary.Select(x => new Data(){ label = x.Key, value = x.Value).ToList();

答案 3 :(得分:2)

我认为“无循环”实际上意味着“我想要LINQ”:

List<Data> = dictionary1.Select(
    pair => new Data() {
        label = pair.Key,
        value = pair.Value
    })).ToList();

答案 4 :(得分:1)

尝试

dictionary1.Select(p => new Data(p.Key, p.Value)).ToList();

答案 5 :(得分:1)

.NET已经有一种数据类型可以执行Data将执行的操作:KeyValuePair<T1,T2>。字典已经实现IEnumerable<KeyValuePair<T1,T2>>,只是强制转换为它。

Dictionary<string, int> blah = new Dictionary<string, int>();
IEnumerable<KeyValuePair<string, int>> foo = blah;

答案 6 :(得分:1)

这是一篇旧帖子,但帖子只是为了帮助其他人;)

转换任何对象类型的示例:

public List<T> Select<T>(string filterParam)
{    
    DataTable dataTable = new DataTable()

    //{... implement filter to fill dataTable }

    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
    Dictionary<string, object> row;

    foreach (DataRow dr in dataTable.Rows)
    {
        row = new Dictionary<string, object>();
        foreach (DataColumn col in dataTable.Columns)
        {
            row.Add(col.ColumnName, dr[col]);
        }
        rows.Add(row);
    }

    string json = new JavaScriptSerializer().Serialize(rows);

    using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
    {
        DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(T[]));
        var tick = (T[])deserializer.ReadObject(stream);
        return tick.ToList();
    }
}

答案 7 :(得分:0)

    public class Data
    {
        public string Key { get; set; }

        public int Value { get; set; }
    }

    private static void Main(string[] args)
    {
        Dictionary<string, int> dictionary1 = new Dictionary<string, int>();
        dictionary1.Add("key1", 1);
        dictionary1.Add("key2", 2);

        List<Data> data = dictionary1.Select(z => new Data { Key = z.Key, Value = z.Value }).ToList();

        Console.ReadLine();
    }

答案 8 :(得分:0)

以防万一只是帮助任何人,我这样做 - 将处理比单个值类型更复杂的对象,如OP所述。

// Assumes: Dictionary<string, MyObject> MyDictionary;
List<MyObject> list = new List<MyObject>();
list.AddRange(MyDictionary.Values.ToArray());