2009-12-02 15 views
1

이전에 알고있는 사전을 하나의 단일 DataTable에 병합하는 것에 대한 질문을 던졌습니다. Dictionaries in DataTable Darin은 문제의 만족할만한 해결책을 제공했습니다. 그러나 내 문제는 진화했습니다. 나는 내가 공급받는 사전의 양을 오랫동안 확신 할 수 없다. 실제로는 1 내지 10 때문에 즉 모음 날에 공급되고,이 사전의 임의의 개수가 될 수 DataTable의 다양한 사전 데이터

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

나는 추측합니다 :

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으로 변경)을 사용하는 것이 더 쉬울 수도 있지만 작동해야합니다.

+0

감사합니다.이 사실을 내 실제 문제 세트로 추정 할 수 있습니다! – Oxymoron