2009-11-26 7 views
1

중첩 된 사전 IN C#에서 데이터를 가져와야합니다. 내 사전은 다음과 같이이다 :중첩 된 사전에서 데이터를 가져 오는 방법 C#

나는 모든 키를 가져올 필요가
static Dictionary<string, Dictionary<ulong, string>> allOffset = 
    new Dictionary<string, Dictionary<ulong, string>>(); 

는/전체 사전의 값은,과 같이 표현 : 사전에

string->>ulong, string 

감사합니다.

답변

1

반복 할 때마다 즉,

을 중첩 된 사전의 회원을 반복

(테스트되지 않은 코드)

foreach(var key1 in dc.Keys) 
{ 
    Console.WriteLine(key1); 
    var value1 = dc[key1]; 
    foreach(var key2 in value1.Keys) 
    { 
     Console.WriteLine(" {0}, {1}", key2, value1[key2]); 
    } 
} 
0

시도 : 중첩 된 foreach 문을 사용하여 전체 목록을 얻기 위해

string s = dict["key"][_float_]; 

루프 : 외부 사전을 통해

 StringBuilder sb=new StringBuilder(); 
     foreach (var v in dict) 
     { 
      sb.Append(v.Key+"=>>"); 
      foreach (var i in v.Value) 
      { 
       sb.Append(i.Key + ", " + i.Value); 
      } 
      sb.Append(Environment.NewLine); 
     } 

     Console.WriteLine(sb); 
0
이것에 대해,이 방법은 모든 사전 항목을 열거한다 무엇

...

public static IEnumerable<KeyValuePair<ulong, string>> GetValues() 
{ 
    foreach (var pair in allOffset.Values) 
    { 
     foreach (var value in pair) 
     { 
      yield return value; 
     } 
    } 
} 
6

LINQ 응답 (즉 모든 트리플을 읽고) :

var qry = from outer in allOffset 
      from inner in outer.Value 
      select new {OuterKey = outer.Key,InnerKey = inner.Key,inner.Value}; 

또는 (직접 문자열을 얻을 수 있습니다) :

var qry = from outer in allOffset 
      from inner in outer.Value 
      select outer.Key + "->>" + inner.Key + ", " + inner.Value; 

foreach(string s in qry) { // show them 
    Console.WriteLine(s); 
} 
+0

나를 펀치에 이겼다. 나는 점 표기법으로 그것을 시도했지만 설탕 - 구문으로 전환하지 않고 '내부'를 얻는 방법을 알아낼 수 없었다. P +1, 대단한 답변! – jrista

3

또는 한 줄 솔루션

allOffset.SelectMany(n => n.Value.Select(o => n.Key+"->>"+o.Key+","+ o.Value)) 
     .ToList() 
     .ForEach(Console.WriteLine); 
관련 문제