2011-08-20 51 views
1

我想知道這樣做的最優化/優雅的解決方案。基本上我有3組數據。 每個組都位於另一個層次中。我正在使用字典中的字典來實現這一點。示例代碼:字典值中字典的正確方法?

Dictionary<string,Dictionary<string,List<string>>> pro = new Dictionary<string,Dictionary<string,List<string>>>(); 
     Dictionary<string,List<string>> part = new Dictionary<string,List<string>>(); 
     List<string> foo = new List<string>(); 
     List<string> bar = new List<string>(); 
     foo.Add("foo1"); 
     foo.Add("foo2"); 
     foo.Add("foo3"); 

     bar.Add("bar1"); 
     bar.Add("bar2"); 
     bar.Add("bar3"); 

     part.Add("Part1", foo); 
     part.Add("Part2", bar); 
     pro.Add("First", part); 

     foreach (var pros in pro) 
     { 
      foreach (var parts in pros.Value) 
      { 
       foreach (var foos in parts.Value) 
       { 
        Console.WriteLine(foos); 
       } 
      } 
     } 

我還是新的C#,即使我的代碼工作我還是覺得還有一個更優雅的解決方案。提前致謝!

回答

1

您可以使用collection initializers作爲構造零件,LINQ作爲打印零件。

Dictionary<string, Dictionary<string,List<string>>> pro = new Dictionary<string, Dictionary<string,List<string>>>() 
{ 
    { "First", new Dictionary<string,List<string>>() 
     { 
      { "Part1", new List<string>() { "foo1", "foo2", "foo3" } }, 
      { "Part2", new List<string>() { "bar1", "bar2", "bar3" } } 
     } 
    } 
}; 

編輯:爲LINQ指計算器上的另一個有用的相關的職位提供了新的鏈接。

+0

我喜歡你的解決方案。但是,如何獲得「Part1」的列表? 親。[「第一」]。 XXX? 我很抱歉,我沒有解釋清楚自己。該列表將被用作列表框的數據源。 –

+0

你會寫作親[[第一]] [「Part1」]獲得該列表 – mtijn

+0

不是我真正希望的答案,但它幫助我找到了解決方案。謝謝! –

2

我想你應該重構這種代碼到字典的簡單包裝類。這種方式幾乎是不可讀的,但如果你爲零件/專業版製作一個包裝類,無論你的名字是什麼,你都可以讓niecer查看和閱讀代碼,並且可以在類中放置一些實用功能,同時隱藏使用字典的實現細節。

+0

我明白你想說什麼,但是我的經驗非常有限。所以我不太確定我怎麼能夠在課堂上循環。 –

+0

所以,我會做一個包裝類的專業,做一個內部類部分?並使用List 收集數據? –

+0

我不喜歡內部類,但是可能是可能的(我只是創建一個普通*類) - 通過實現IEnumerable <...>或編寫IEnumerable類型的屬性<...>(... =事物的類型要枚舉),可以使用的foreach(在Children子x)或的foreach(X在classinstance.property) – Carsten