У меня есть карта X, и я пытаюсь получить набор ключей, удовлетворяющих определенному условию, что-то вроде этого:Набор ключей с карты
Map.Keys X
|> Set.filter (fun x -> ...)
... но я не могу найти способ получить ключи из коллекции карт F #.
У меня есть карта X, и я пытаюсь получить набор ключей, удовлетворяющих определенному условию, что-то вроде этого:Набор ключей с карты
Map.Keys X
|> Set.filter (fun x -> ...)
... но я не могу найти способ получить ключи из коллекции карт F #.
Преобразование map в последовательность кортежей (key,value)
первых, а затем сопоставить его с последовательностью только ключи:
map |> Map.toSeq |> Seq.map fst
FSI образец:
>Map.ofList[(1,"a");(2,"b")] |> Map.toSeq |> Seq.map fst;;
val it : seq<int> = seq [1; 2]
Или в качестве альтернативы, как прописывание ключей, вероятно, делает неважно, что вы можете использовать более энергичный метод, возвращающий list
всех ключей. Кроме того, не трудно сделать его в метод расширения keys
из Microsoft.FSharp.Collections.Map
модуля:
module Map =
let keys (m: Map<'Key, 'T>) =
Map.fold (fun keys key _ -> key::keys) [] m
Результат должен быть набор не список –
@ GuillaumeMassé: Автор, видимо, были проблемы только с»... способ получить ключи от коллекции карты F # », поэтому ответ был адресован именно этому вопросу. –
не будут ли эти методы немного неэффективными ??? – ympostor