ДАО DTO ПОСТЕПЕННО ФИЛИАЛ

О, мальчик. sprocs не предоставляют себя (автоматизированному) поблочному тестированию. Я сортирую - "модульного теста" мой комплекс sprocs путем записи тестов в t-sql пакетных файлах и руке, проверяющей вывод операторов печати и результатов.

25
задан John Saunders 30 July 2009 в 17:04
поделиться

1 ответ

f # имеет две общие ассоциативные структуры данных:

Та, к которой вы больше всего привыкли, изменяемый словарь, который он наследует от своего присутствия в BCL и использует хэш-таблицу под капотом.

let dict = new System.Collections.Generic.Dictionary<string,int>()
dict.["everything"] <- 42

Другая известна как Карта и в общем функциональном стиле является неизменной и реализуется с помощью бинарных деревьев.

Вместо операций, которые изменяют Словарь, карты предоставляют операции, которые возвращают новую карту что является результатом запрошенного изменения. Во многих случаях под капотом нет необходимости делать совершенно новую копию всей карты, поэтому обычно есть те части, которые могут использоваться совместно. Например:

let withDouglasAdams = Map.add "everything" 42 Map.empty

Значение withDouglasAdams навсегда останется как ассоциация «всего» с 42. Поэтому, если вы сделаете это позже:

let soLong = Map.remove "everything" withDouglasAdams

Тогда эффект этого ' удаление 'видно только через значение soLong .

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

но не источник вашей проблемы. Оператор dict возвращает явную неизменяемую реализацию IDictionary (несмотря на то, что в нем это не указано.

34
ответ дан 28 November 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: