アルファベットのキーと数値の値を持つハッシュテーブルがあります。キーに基づいてハッシュテーブルをソートする方法は?
ExchangeA, 200
ExchangeV, 100
ExchangeC, 200
このように
ExchangeA, 200
ExchangeC, 200
ExchangeV, 100
これには SortedDictionary
を使用できます。これにより、キーによる並べ替えが行われます。あなたの場合、SortedDictionary<string, int>
は機能します:
SortedDictionary<string, int> dict = new SortedDictionary<string, int>();
dict.Add("Exchange C", 200);
dict.Add("Exchange A", 200);
dict.Add("Exchange V", 100);
foreach (var kvp in dict)
{
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
出力:
Key = Exchange A, Value = 200
Key = Exchange C, Value = 200
Key = Exchange V, Value = 100
ハッシュテーブルを「ソート」するために私が見つけた最も簡単な方法は次のとおりです。
var hash = new Hashtable();
var orderedKeys = hash.Keys.Cast<string>().OrderBy(c => c); // supposing you're using string keys
var allKvp = from x in orderedKeys select new{ key = x, value = hash[x] };
ただし、Imは元のハッシュテーブルを順序付けせず、順序付けられた方法でその値を読み取るだけです。
他の返信と同様に、データを並べ替えて保存する必要がある場合は、SortedDictionaryを使用するのが最善です。
ハッシュテーブルの性質上、所定のキーで並べ替えることはできません。ハッシュテーブルの制御外の値であるハッシュコードに基づいて、キーをバケットに整理します。ただし、キーと値のペアは任意の順序で読み取ることができます。 LINQを使用してそれを行う方法は次のとおりです。
IDictionary<string, int> d = ...; // your hash table
var ordered = d.OrderBy(p => p.Key).ToList();
foreach (var p in ordered) {
Console.WriteLine("Key: {0} Value: {1}", p.Key, p.Value);
}
ハッシュの代わりにリストを使用して(またはハッシュを辞書に変換して)、次のようにします。
var dictionary = new Dictionary<string, int>();
var l = dictionary.Keys.ToList();
l.Sort();
foreach (var key in l)
{
Console.WriteLine(dictionary[key]);
}
Linqの使用は簡単です(using System.Linq
):
var sortedList = (from kv in MyDictionary select kv order by kv.Key).ToList<KeyValuePair<string, int>>();
KeyValuePair<string, int>
のリストを返します。