代码之家  ›  专栏  ›  技术社区  ›  Oxymoron

数据表中不同数量的字典

  •  1
  • Oxymoron  · 技术社区  · 15 年前

    早些时候,我问了一个关于将已知数量的字典合并为一个单一数据表的问题: Dictionaries in DataTable 达林给我提供了一个满意的解决办法。 但我的问题已经演变了。我不能很快确定我得到的词典的数量。实际上,它可以是1到10之间的任何数字。 正因为如此,词典以一个集合的形式提供给我,即:

    IList<IDictionary<string, string>> 
    字典静态数量的解决方案如下:
    
        var dic1 = new Dictionary() 
    { 
        { "A", "s" },
        { "B", "d" },
        { "C", "a" },
        { "D", "w" },
    };
    
    var dic2 = new Dictionary() 
    { 
        { "A", "z" },
        { "B", "e" },
        { "C", "r" },
        { "D", "t" },
    };
    
    var dic3 = new Dictionary() 
    { 
        { "A", "i" },
        { "B", "o" },
        { "C", "u" },
        { "D", "p" },
    };
    
    var table = new DataTable();
    table.Columns.Add("K", typeof(string));
    table.Columns.Add("c1", typeof(string));
    table.Columns.Add("c2", typeof(string));
    table.Columns.Add("c3", typeof(string));
    foreach (var key in dic1.Keys)
    {
        table.Rows.Add(key, dic1[key], dic2[key], dic3[key]);
    }
    

    现在,我如何使这个代码适用于不同数量的字典(尤其是行。添加(xxx)部分,因为该行中的每一列本质上都是字典的值)

    1 回复  |  直到 15 年前
        1
  •  1
  •   Marc Gravell    15 年前

    我猜:

    foreach (var key in list[0].Keys) // assume the first defines everything
    {
        object[] rowData = new object[list.Count + 1];
        rowData[0] = key;
        for(int i = 0 ; i < list.Count ; i++) {
            rowData[i+1] = list[i][key];
        }
        table.Rows.Add(rowData);
    }
    

    顺便说一下 可以 (或不一定)更容易使用 params IDictionary<string, string>[] (在这种情况下,更改 .Count .Length )-但两者都应该有效。