2011-01-07 3 views
1

Я прикрепляю HashTable к combobox в WPF. Проблема в том, что при запуске программы я вижу значения в другом порядке, чем я первоначально ввел.Проблема сортировки Hashtable.Data появилась в другом порядке

Пожалуйста, скажите, почему это происходит.

Заранее спасибо.

С уважением,

John.

ответ

2

Хеш-таблица не предусматривает каких-либо заказов. Как правило, список принудительно вводит порядок вставки. Вы можете попробовать использовать List<T> и вставить KeyValuePair<K,V>, если вам нужны пары значений ключа. Если вам действительно нужен словарь, вы можете попробовать использовать класс SortedDictionary<K,V>.

+1

'' SortedDictionary не сортирован по заказу вставки, это отсортированы по ключу используя (по желанию) '' IComparer . – LukeH

+0

@ LukeH, вы совершенно правы; на секунду увенчался мозгом. Отредактированный ответ, чтобы отразить это. –

0

Хэш-таблица упорядочивает свои элементы хэшем ключа, а не порядком их добавления в хеш-таблицу.

1

Порядок перечисления на HashTable, HashSet<T>, Dictionary<T> и т. Д. Не указан. В типичных реализациях элементы помещаются в слоты таким образом, что это удобно для создания эффективной хеш-таблицы.

Он не пытается сохранить порядок, в котором были добавлены элементы.

Класс HashSet<T> обеспечивает высокопроизводительные операции установки. Набор представляет собой набор, который не содержит повторяющихся элементов и элементы которого не имеют особого порядка.

0

Решение проблемы с использованием Generic SortedList. Спасибо всем, кто помог.

0

**

Упорядочение коллекции ключей основана на слоте элемент этого ключа был сохранен. Слот, в котором хранится элемент, зависит от хэш-значения ключа и стратегии разрешения конфликтов.

**

Чтобы получить элемент из Hashtable, вы можете индексировать Hashtable с помощью ключа, так же, как вы бы индекс массива по порядковому значению. Следующая короткая программа C# демонстрирует эту концепцию. Он добавляет несколько элементов в Hashtable, связывая строковый ключ с каждым элементом. Затем к конкретному элементу можно получить доступ с помощью его строкового ключа.

с использованием системы; с использованием System.Collections;

общественный класс HashtableDemo { {} приватный статический 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.Это свойство можно использовать для перечисления элементов в Hashtable, как показано ниже:

// Шаг через все элементы в Hashtable Еогеаспа (строка ключ в employees.Keys) Console.WriteLine ("Value у сотрудников [ \ "" + key + "\"] = "+ employees [key] .ToString()); Поймите, что порядок, с которым вставлены элементы, и порядок ключей в коллекции ключей не обязательно совпадают. Заказ коллекции ключей основан на слоте, в котором хранился элемент ключа. Слот, в котором хранится элемент, зависит от хэш-значения ключа и стратегии разрешения конфликтов. Если вы запустите указанный выше код, вы увидите, что порядок перечисления элементов не обязательно совпадает с порядком, в котором элементы были добавлены в Hashtable. Выполнения кода выхода:

Value у сотрудников [ "333-44-5555"] = Jisun Значение у сотрудников [ "111-22-3333"] = Скотт Value у сотрудников [ "222-33-4444 "] = Sam Даже если данные были вставлены в Hashtable в порядке« Скотт »,« Сэм »,« Дзисун ».

http://msdn.microsoft.com/en-us/library/ms379571(v=vs.80).aspx

Смежные вопросы