DataTable中不同数量的字典

时间:2009-12-02 11:53:11

标签: c# list dictionary datatable collections

之前我问过一个关于将已知数量的词典合并为一个单一DataTable的问题: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]);
}

现在,我怎样才能使这段代码适用于不同数量的词典(特别是Rows.Add(xxx)部分,因为该行中的每一列实质上都是字典的值)

1 个答案:

答案 0 :(得分:1)

我在猜测:

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

btw,可能(或者可能不是)更容易使用params IDictionary<string, string>[](在这种情况下将.Count更改为.Length) - 但要么应该有效