Использование Seq.map
, как предлагает ildjarn, является одним из вариантов (вы можете добавить Array.ofSeq
в конец, чтобы получить массив множеств, как вы говорите в своей инструкции).
Альтернативный подход - использовать понимание массива:
let get_keyset (tblseq:seq<System.Collections.Generic.Dictionary<_, _>>) =
[| for x in tblseq -> x.Keys |> Set.ofSeq |]
Обозначение [| .. |]
говорит о том, что вы хотите создать массив элементов, а выражение, следующее за ->
, указывает, что должно быть создано как элемент. Синтаксис, по сути, просто более хороший способ написания Seq.map
(хотя он поддерживает больше функций).
Вы также можете использовать этот синтаксис для создания множеств (вместо вызова Set.ofSeq
). В этом случае это не имеет особого смысла, потому что Set.ofSeq
быстрее и быстрее, но иногда это довольно аккуратный вариант. Это позволяет вам избегать аннотаций типов, потому что вы можете получить ключ словаря, используя KeyValue
pattern:
let get_keyset tblseq =
[| for x in tblseq ->
set [ for (KeyValue(k, v)) in x -> k ] |]