2011-12-28 7 views
3

私はこのリストを持っている:ディクショナリのint値に基づいてディクショナリのリスト<int, string>を注文するにはどうすればよいですか?

List<Dictionary<int, string>> list = new List<Dictionary<int, string>>(); 

と私は辞書のint型の値に基づいて(昇順)それを注文したいと思います。どうしたらいいですか?

例:

Dictionary<int, string> Min1 = new Dictionary<int, string>(); 
Dictionary<int, string> Min2 = new Dictionary<int, string>(); 
Dictionary<int, string> Min3 = new Dictionary<int, string>(); 
Dictionary<int, string> Min4 = new Dictionary<int, string>(); 
Dictionary<int, string> Min5 = new Dictionary<int, string>(); 

Min1.Add(3, "name"); 
Min2.Add(1, "hello"); 
Min3.Add(5, "marco"); 
Min4.Add(4, "is"); 
Min5.Add(2, "my"); 

List<Dictionary<int, string>> list = new List<Dictionary<int, string>>(); 
list.Add(Min1); 
list.Add(Min2); 
list.Add(Min3); 
list.Add(Min4); 
list.Add(Min5); 

// NOW I NEED TO ORDER list BASED ON DICTIONARY INT VALUE 
// SO THE ORDER ON THE LIST SHOULD BE Min2, Min5, Min1, Min4, Min3 

私は、リストをソートしたいのですが、そのとき私はサイクルそれを、私は私はあなたがしたい場合は

+2

あなたがしたいのソートの例を与えることができますか? – Elastep

+0

例を追加 – markzzz

+1

これはあまり意味がありません。あなたは各辞書の最小のキーで注文しますか?あなたは、異なる辞書を比較するために一つの価値を持たなければならず、それをどの辞書にするかを選択する必要があります。 –

答えて

6

「こんにちは私の名前はマルコある」印刷する文字列を取得しますあなたが行うことができます

list.SelectMany(x=>x).OrderBy(x=>x.Key) 

をしかし、あなたは好きではない場合、データをフラット化し、ちょうど辞書を並べ替える:データをフラット化し、それらを並べ替えるあなたはこれを試すことができます

list.Select(x=>x.OrderBy(y=>y.Key)); 

編集:私が理解として、あなたはちょうどあなたがこれを行うことができますので、1つの辞書を使う必要があります:あなたの代わりに辞書のリストを使用したい場合は

Dictionary<int,string> dic = new Dictionary<int,string>(); 
var result = dic.OrderBy(x=>x.Key).ToLookup(x=>x); 

を(あなたのケースでいるようだが、良いではありません)あなたこれを行うことができます。

List<KeyValuePair<int,string>> lst1 = new List<KeyValuePair<int,string>>(); 
var result = lst1.OrderBy(x=>x.Key).ToLookup(x=>x); 
1

Genericsを定義するときにSortedDictionaryまたはSortedListを使用できます。 これを行うと、どのような順序で要素をディクショナリに追加しても、要素はキー要素に基づいてソートされた形式で格納されます(どちらがint型か)。 さらに、SortedDictionaryはBinarySearchツリーを使用しています。

+0

もう1つのこと、私はなぜあなたは5つの辞書を使用しているのだろうと思っていますが、1つの辞書(min1)はすべてのKeyValueペアを保存できます。 –

1

あなたは、単一の辞書を持っていたら、LINQを使用して、以下のように、あなたは辞書のキーに基づいて値の順序付きリストを作成することができます。

var dict = new List<Dictionary<int, string>>(); 
var list = dict.OrderBy(e => e.Key).ToList(); 

LINQなしあなたはSortedListを使用することができます。

このことから
SortedList<int, string> sortList = new SortedList<int, string>(dict); 

、あなたはその後、平野List<T>をしたい場合:

List<string> list = new List<string>(sortList.Values); 
1

しかし、私は上記のシナリオを挑戦として取り上げ、必要な結果をコードに実装しました。私は以下のコードを投稿しています。ナットシェルでは、ソートされた辞書要素を格納する別のリストを作成する必要があります。デバッガで次のコードを実行し、自分で結果を確認することができます。

public class program 
{ 

    public static void Main() 
    { 

    SortedDictionary<int, string> Min1 = new SortedDictionary<int, string>(); 
    SortedDictionary<int, string> Min2 = new SortedDictionary<int, string>(); 
    SortedDictionary<int, string> Min3 = new SortedDictionary<int, string>(); 
    SortedDictionary<int, string> Min4 = new SortedDictionary<int, string>(); 
    SortedDictionary<int, string> Min5 = new SortedDictionary<int, string>(); 
     Min1.Add(3, "name"); 
     Min2.Add(1, "hello"); 
     Min3.Add(5, "marco"); 
     Min4.Add(4, "is"); 
     Min5.Add(2, "my"); 

List<SortedDictionary<int, string>> list = new List<SortedDictionary<int, string>>(); 
     list.Add(Min1); 
     list.Add(Min2); 
     list.Add(Min3); 
     list.Add(Min4); 
     list.Add(Min5); 

     List<SortedDictionary<int, string>> final_list = new List<SortedDictionary<int, string>>(); 
     List<int> index = new List<int>() ; 

     foreach (var element in list) 
     { 
      foreach (var elements in element) 
      { 
       index.Add(elements.Key); 
       Console.Write(" " +elements.Value+ " "); 
      } 
     } 
     index.Sort(); 


     foreach (var indexelement in index) 
     { 
      foreach (var element in list) 
      { 
       foreach (var elements in element) 
       { 
        if (indexelement == elements.Key) 
        { 
         final_list.Add(element); 
        } 

       } 

      } 
     } 
     Console.WriteLine(); 
     foreach (var element in final_list) 
     { 
      foreach (var elements in element) 
      { 
       Console.Write(" " + elements.Value+ " "); 
      } 
     } 

     Console.ReadLine(); 
    } 
} 

ハッピーコーディング:)

関連する問題