Подтвердить что ты не робот

F #: Разница между словарем, Hashtable и Map

Я новичок в программировании .NET. Извините, если этот вопрос был задан раньше.

В настоящее время я изучаю F #. В чем отличия между Словарем, Хэш-таблицей и Картой? Когда я должен использовать каждый?

У меня также есть другой вопрос, который не упоминается в названии. Когда следует использовать Async.RunSynchronously? Мне кажется, что это противоречит мне, поэтому я уверен, что чего-то не хватает.

4b9b3361

Ответ 1

Выбор между словарем, Hashtable и Map зависит от случаев использования. Однако вы должны знать характеристики каждого из них. Это не исчерпывающий список, а только некоторые ключевые различия, которые вы можете начать с:

  • Hashtable Представляет коллекцию пар ключ/значение, которые организованы на основе хеш-кода ключа. Это измененная коллекция из .NET BCL
  • Словарь < > - это общая реализация хэш-таблицы. Также измененная коллекция из .NET BCL
  • Карта. Это неизменяемый тип F #. Он реализован на основе AVL-деревьев, который представляет собой совершенно другую структуру данных с различными характеристиками и примерами использования.

Если вы делаете много записей, коллекции таблиц Hash имеют значительно лучшую производительность заполнения, чем деревья AVL.

Извлечение значения из словаря с помощью его ключа происходит очень быстро, рядом с O (1), потому что класс Dictionary реализован как хеш-таблица.

Карты F # реализованы как непреложные деревья AVL, эффективная структура данных, которая формирует самобалансирующееся двоичное дерево. Деревья AVL хорошо известны своей эффективностью, в которых они могут искать, вставлять и удалять элементы в дереве в O (log n), где n - количество элементов в дереве.

Что касается случая использования карты, если у вас есть набор статических данных (таких как данные конфигурации, которые загружаются при запуске вашего приложения), вам нужно часто искать ключ, карта так же хороша, как и любая, его неизменность в этом случае гарантирует, что статические данные не могут быть изменены по ошибке и мало влияют на производительность, поскольку вам никогда не нужно мутировать ее после инициализации.

Async.RunSynchronously выполняет предоставленное асинхронное вычисление и ожидает его результата. Вы можете использовать его в интерактивном окне F #, например, для проверки асинхронных рабочих процессов.