ハッシュテーブルをWPFのコンボボックスに接続しています。問題は、プログラムが実行されたときに、私が最初に入力したのとは異なる順序で値が表示されていることです。ハッシュテーブルソートの問題。データが異なる順序で表示される
なぜそれが起こっているのか教えてください。
ありがとうございます。
ありがとう、
ジョン。
ハッシュテーブルをWPFのコンボボックスに接続しています。問題は、プログラムが実行されたときに、私が最初に入力したのとは異なる順序で値が表示されていることです。ハッシュテーブルソートの問題。データが異なる順序で表示される
なぜそれが起こっているのか教えてください。
ありがとうございます。
ありがとう、
ジョン。
ハッシュテーブルは順序を強制しません。一般的には、挿入順序を強制します。キー値のペアが必要な場合は、List<T>
を使用し、KeyValuePair<K,V>
を挿入してください。
辞書が本当に必要な場合は、
SortedDictionary<K,V>
クラスを試してみてください。
ハッシュテーブルは、要素をハッシュテーブルに追加する順序ではなく、キーのハッシュで順序付けします。
HashTable
、HashSet<T>
、Dictionary<T>
などの列挙の順序は不明です。典型的な実装では、要素は効率的なハッシュテーブルを作成するのに便利な方法でスロットに配置されます。
要素が追加された順序を保持しようとするものではありません。
HashSet<T>
クラスは、高性能なセット操作を提供します。集合は、重複する要素を含まず、その要素が特に順序どおりでない集合である。
Generic SortedListを使用して問題を解決しました。助けてくれた皆様に感謝します。
は**
キーコレクションの順序付けは、キーのアイテムが格納されていたスロットに基づいています。アイテムが格納されるスロットは、キーのハッシュ値と衝突解決戦略によって異なります。
**
のHashtableからアイテムを取得するには、キーによってインデックスハッシュテーブルは、ちょうどあなたが序数値でインデックスの配列を希望好きなことができます。次の短いC#プログラムは、この概念を示しています。ハッシュテーブルにいくつかの項目を追加し、各項目に文字列キーを関連付けます。次に、その特定の項目にその文字列キーを使用してアクセスすることができます。
using System; using System.Collections;
public class HashtableDemo { private static Hashtable employees = new Hashtable();
public static void Main()
{
// Add some values to the Hashtable, indexed by a string key
employees.Add("111-22-3333", "Scott");
employees.Add("222-33-4444", "Sam");
employees.Add("333-44-55555", "Jisun");
// Access a particular key
if (employees.ContainsKey("111-22-3333"))
{
string empName = (string) employees["111-22-3333"];
Console.WriteLine("Employee 111-22-3333's name is: " + empName);
}
else
Console.WriteLine("Employee 111-22-3333 is not in the hash table...");
}
}このコードはまた、指定されたキーは、ハッシュテーブルで発見されたかどうかを示すブール値を返すにContainsKey()メソッドを、実証します。 Hashtableクラスには、Hashtableで使用されるキーのコレクションを返すKeysプロパティが含まれています。以下に示すように、このプロパティは、ハッシュテーブル内の項目を列挙するために使用することができます。
//は、Hashtableの foreachの(employees.Keys内の文字列のキー)の従業員で Console.WriteLineを( "バリュー内のすべての項目をステップ[ \ "+ key +" \ "] =" + employees [key] .ToString()); アイテムが挿入される順序とKeysコレクション内のキーの順序が必ずしも同じではないことを認識してください。 Keysコレクションの順序は、キーの項目が格納されたスロットに基づいています。アイテムが格納されるスロットは、キーのハッシュ値と衝突解決戦略によって異なります。上記のコードを実行すると、アイテムが列挙される順序が、アイテムがハッシュテーブルに追加された順序と必ずしも一致しないことがわかります。上記のコードの出力を実行する従業員で
値[ "333-44-5555"]は、従業員にJisun 価値= [ "111-22-3333" は】従業員にスコット 価値= [ "222-33-4444 "] = Sam データが" Scott "、" Sam "、" Jisun "という順序でHashtableに挿入されたにもかかわらず、
http://msdn.microsoft.com/en-us/library/ms379571(v=vs.80).aspx
SortedDictionaryが '挿入順にソートされていない'、それは、(オプション) 'たIComparer'を使用してキーにソートします。 –
LukeH
@LukeH、あなたは完全に正しいです。 1秒間そこに脳のおならがあった。これを反映するように編集された答え。 –