web-dev-qa-db-ja.com

キーでソートされたc#ハッシュテーブル

アルファベットのキーと数値の値を持つハッシュテーブルがあります。キーに基づいてハッシュテーブルをソートする方法は?

ExchangeA, 200
ExchangeV, 100
ExchangeC, 200

このように

ExchangeA, 200
ExchangeC, 200
ExchangeV, 100
6
John Ryann

これには 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
13
BrokenGlass

ハッシュテーブルを「ソート」するために私が見つけた最も簡単な方法は次のとおりです。

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);
}
2
dasblinkenlight

ハッシュの代わりにリストを使用して(またはハッシュを辞書に変換して)、次のようにします。

var dictionary = new Dictionary<string, int>();
var l = dictionary.Keys.ToList();
l.Sort();
foreach (var key in l)
{
    Console.WriteLine(dictionary[key]);
}
0
Matt Grande

Linqの使用は簡単です(using System.Linq):

var sortedList = (from kv in MyDictionary select kv order by kv.Key).ToList<KeyValuePair<string, int>>();

KeyValuePair<string, int>のリストを返します。

0
Diego