2011-09-15 2 views
2

私のソース構造は、いずれかの辞書のように見えるです:アルゴリズム

new Dictionary<string, string>(); 
dic.Add("Dinges", new List<String>() { "A", "B" }); 
dic.Add("Facebook", new List<String>() { "Dinges" }); 
dic.Add("SocialMedia", new List<String>() { "FaceBook" }); 
dic.Add("Medium", new List<String>() { "SocialMedia" }) 

かのように見えるタプルのリスト:

new List<Tuple<String, String>>(); 
list.Add(Tuple.Create("Dinges", "A"); 
list.Add(Tuple.Create("Dinges", "B"); 
list.Add(Tuple.Create("Facebook", "Dinges"); 
list.Add(Tuple.Create("SocialMedia", "Facebook"); 
list.Add(Tuple.Create("Medium", "SocialMedia"); 

これらの項目間の関連ですおそらく継承ツリーとして最もよく説明されています。中級は最も一般的なクラスであり、Aは最も特化したクラスです。私は本当にこれを達成するいくつかの助けが必要

new List<Tuple<String, String>>(); 
list.Add(Tuple.Create("Dinges", "A"); 
list.Add(Tuple.Create("Dinges", "B"); 
list.Add(Tuple.Create("Facebook", "Dinges"); 
list.Add(Tuple.Create("Facebook", "A"); 
list.Add(Tuple.Create("Facebook", "B"); 
list.Add(Tuple.Create("SocialMedia", "A"); 
list.Add(Tuple.Create("SocialMedia", "B"); 
list.Add(Tuple.Create("SocialMedia", "Dinges"); 
list.Add(Tuple.Create("SocialMedia", "Facebook"); 
list.Add(Tuple.Create("Medium", "A"); 
list.Add(Tuple.Create("Medium", "B"); 
list.Add(Tuple.Create("Medium", "Dinges"); 
list.Add(Tuple.Create("Medium", "FaceBook"); 
list.Add(Tuple.Create("Medium", "SocialMedia"); 

、私は推移の方法でいくつかのヒントを持っていた:次のようになりたい項目を再配置する方法です私は何を探している

閉鎖、しかし私は本当にそれを周り私の頭を包むことができます。どんな助けでも本当に感謝しています。その後

private static IEnumerable<string> TransitiveValues(string name, 
        Dictionary<string, List<string>> lookup) 
{ 
    yield return name; 
    List<string> children; 
    if (lookup.TryGetValue(name, out children)) 
    { 
     foreach (string child in children) 
     { 
      foreach (string value in TransitiveValues(child, lookup)) 
      { 
       yield return value; 
      } 
     } 
    } 
} 

::私は仮定がDictionary<string, List<string>>として宣言されることを意図した辞書のアプローチから、

答えて

3

var query = from name in dictionary.Keys 
      from value in TransitiveValues(name, dictionary) 
      select Tuple.Create(name, value); 
var list = query.ToList(); 

はちょうどあなたが任意のサイクルを持っていないことを確認してください:)

+0

これはまさに私が必要とするものですが、今はコードを理解する必要があります;)多くの感謝! – Oxymoron