Проблема сортировки хеш-таблиц. Данные появились в другом порядке - PullRequest
1 голос
/ 07 января 2011

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

Скажите, пожалуйста, почему это так.*

С уважением,

Джон.

Ответы [ 5 ]

2 голосов
/ 07 января 2011

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

1 голос
/ 07 января 2011

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

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

0 голосов
/ 13 апреля 2011

**

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

**

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

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

публичный класс HashtableDemo { частные статические сотрудники Hashtable = 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 foreach (строковый ключ у сотрудников. Ключи) Console.WriteLine ("Значение у сотрудников [\" "+ ключ +" \ "] =" + сотрудников [ключ] .ToString ()); Поймите, что порядок, в котором элементы вставлены, и порядок ключей в коллекции ключей не обязательно совпадают. Порядок сбора ключей основан на слоте, в котором был сохранен элемент ключа. Слот, в котором хранится элемент, зависит от значения хэша ключа и стратегии разрешения коллизий. Если вы запустите приведенный выше код, вы увидите, что порядок перечисления элементов не обязательно совпадает с порядком, в котором элементы были добавлены в Hashtable. Запуск вышеуказанных кодовых выходов:

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

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

0 голосов
/ 11 января 2011

Решил проблему с помощью Generic SortedList.Спасибо всем, кто помог.

0 голосов
/ 07 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...