Различное количество словарей в DataTable - PullRequest
1 голос
/ 02 декабря 2009

Ранее я задавал вопрос о слиянии известного числа словарей в одну таблицу DataTable: Словари в 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 Ответ

1 голос
/ 02 декабря 2009

Я предполагаю:

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) - но любой из них должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...