辞書がありますDictionary<string, Point>
キーはc1、c3、c2、t1、、t4、t2です。c1、c2、c3、t1、t2、t3になるように並べ替えたい
私はそれを使用してソートしようとしています
Input.OrderBy(key => key.Key );
しかし、それは動作しません
それを解決する方法はありますか
Input.OrderBy
はディクショナリをソートしません。順序付けられた順序でアイテムを返すクエリを作成します。
おそらく OrderedDictionary はあなたが望むものを提供します。
または、Generic SortedDictionary を使用します
次のように、ソートされていないオブジェクトをSortedDictionaryオブジェクトにロードします。
SortedDictionary<string, string> sortedCustomerData = new SortedDictionary<string,string>(unsortedCustomerData);
UnsortedCustomerDataは同じジェネリック型(辞書文字列、文字列、または場合によっては文字列、ポイント)です。キーによって新しいオブジェクトを自動的にソートします
Msdnによると:SortedDictionary(IDictionary):指定されたIDictionaryからコピーされた要素を含むSortedDictionaryクラスの新しいインスタンスを初期化し、キータイプにデフォルトのIComparer実装を使用します。
単なる推測ですが、入力をソートすることを想定しているようです。 OrderByメソッドは、実際には同じ値を含むIOrderedEnumerableの順序付きインスタンスを返します。戻り値を保持する場合は、以下を実行できます。
IOrderedEnumerable orderedInput
orderedInput = Input.OrderBy(key=>key.Key)
コレクションを変更するほとんどのメソッドは、この同じパターンに従います。これにより、元のコレクションインスタンスが変更されないようにします。これにより、意図しないときに誤ってインスタンスを変更することを防ぎます。ソートされたインスタンスのみを使用する場合は、上記のように変数をメソッドの戻り値に設定するだけです。
Input.OrderByは、順序付けられた順序でアイテムを返すクエリを作成するため、同じディクショナリに割り当てます。
objectDict = objectDict.OrderBy(obj => obj.Key).ToDictionary(obj => obj.Key, obj => obj.Value);
次のコードは、さらに2つの list sから sort 辞書を使用します。
using System;
using System.Collections.Generic;
using System.Drawing;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
Dictionary<string,Point> r=new Dictionary<string,Point>();
r.Add("c3",new Point(0,1));
r.Add("c1",new Point(1,2));
r.Add("t3",new Point(2,3));
r.Add("c4",new Point(3,4));
r.Add("c2",new Point(4,5));
r.Add("t1",new Point(5,6));
r.Add("t2",new Point(6,7));
// Create a list of keys
List<string> zlk=new List<string>(r.Keys);
// and then sort it.
zlk.Sort();
List<Point> zlv=new List<Point>();
// Readd with the order.
foreach(var item in zlk) {
zlv.Add(r[item]);
}
r.Clear();
for(int i=0;i<zlk.Count;i++) {
r[zlk[i]]=zlv[i];
}
// test output
foreach(var item in r.Keys) {
Console.WriteLine(item+" "+r[item].X+" "+r[item].Y);
}
Console.ReadKey(true);
}
}
}
上記のコードの出力を以下に示します。
c1 1 2
c2 4 5
c3 0 1
c4 3 4
t1 5 6
t2 6 7
t3 2 3
使った
var l = Input.OrderBy(key => key.Key);
それを辞書に変換しました