最近、.NETの並べ替えを含む生産的なコードを見つけましたDictionary<string,CustomObject>
。基本的には、ディクショナリを一時的なディクショナリにコピーしてから、元のディクショナリを.Clear()し、Linq式を介して順序付けられたKeyValuePairsを、CustomObjectsのDateTime値で挿入します。
私はこのコードが機能しないことを期待し、辞書(およびHashSet)をソートできないことを期待して、すでにそれを削除していました。次に、次のテストコードを記述しました。これは、驚いたことに、foreachループを繰り返したときに、辞書からの並べ替えられた出力を示していました。
これは、現在の実装ではランダム効果でありDictionary<TKey, TValue>
、現在の場合は機能する可能性がありますが、.NETの別の実装では失敗しますか?それとも、.NET辞書で使用される標準機能ですか?
私はまだ生産的なコードに欠陥があると考えていますが、機能しています。注文が並べ替えルーチンを見つけた場所以外の場所で使用されている場合、長いテストを必要として、それを削除する必要がありますか、それともそのままにしておいても安全ですか?
これが私のテストコードです:
static void Main(string[] args)
{
var rnd = new Random();
var dict = new Dictionary<int, string>();
for (int i = 0 ; i < 10 ; i++)
{
int rndValue;
do
{
rndValue = rnd.Next(100);
}
while (dict.ContainsKey(rndValue));
dict.Add(rndValue, "MyValue#" + i);
}
foreach (KeyValuePair<int, string> pair in dict)
{
Console.WriteLine("Key: " + pair.Key + ", Value: " + pair.Value);
}
Console.Write("Enter...");
Console.ReadLine();
var dictBuff = dict.ToDictionary(p => p.Key, p => p.Value);
dict.Clear();
var sortdict = from pair in dictBuff orderby pair.Key ascending select pair;
foreach (KeyValuePair<int, string> pair in sortdict)
{
dict.Add(pair.Key, pair.Value);
}
Console.WriteLine("'Sorted' Dictionary:");
foreach (KeyValuePair<int, string> pair in dict)
{
Console.WriteLine("Key: " + pair.Key + ", Value: " + pair.Value);
}
Console.Write("Enter...");
Console.ReadLine();
}