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

Карта F # на словарь С#

Я пытаюсь преобразовать карту F # в словарь С#, пока я использую:

    let toDictionary (map : Map<_, _>) : Dictionary<_, _> =
        let dict = new Dictionary<_, _>()
        map |> Map.iter (fun k v -> dict.Add(k, v))
        dict

Он просто чувствует себя немного неуклюжим, я совершенно новый для F #, так что там лучший способ?

4b9b3361

Ответ 1

1. Если вы хотите стандартную реализацию словаря: См. Ответ jbtule

2. Если вы хотите неизменный, быстрый IDictionary: функция dict из текущей основной библиотеки F # позволяет создавать словарь только для чтения из любой последовательности кортежей с ключом:

myDict |> Map.toSeq |> dict

Возвращаемое значение имеет тип IDictionary и поэтому должно использоваться с С#. Спасибо Даниэль, чтобы напомнить мне о Map.toSeq.

3. Если вам будет удобно использовать Map непосредственно: Map <, > реализует IDictionary, который должен быть удобен для использования с С#. Однако доступ к карте - O (log n), в то время как доступ к словарю на основе хешей является постоянным.

Ответ 2

A С# Dictionary примет конструктор IDictionary в нем. Map является IDictionary так:

let toDictionary (map : Map<_, _>) : Dictionary<_, _> = Dictionary(map)

Ответ 3

let toDictionary = Map.toSeq >> dict