套从地图的钥匙

Suu*_*aku 21 f# hashtable

我有一张地图X,我正在尝试获得一组满足某种条件的键,如下所示:

Map.Keys X
|> Set.filter (fun x -> ...)
Run Code Online (Sandbox Code Playgroud)

...但我无法找到从F#的Map集合中获取密钥的方法.

Gen*_*ski 31

首先将地图转换为元组序列,(key,value)然后将其映射到一系列只是键:

map |> Map.toSeq |> Seq.map fst
Run Code Online (Sandbox Code Playgroud)

FSI样本:

>Map.ofList[(1,"a");(2,"b")] |> Map.toSeq |> Seq.map fst;;
val it : seq<int> = seq [1; 2]
Run Code Online (Sandbox Code Playgroud)

或者,由于键的排序可能无关紧要,您可以使用更加热切的方法返回list所有键.将其keys作为Microsoft.FSharp.Collections.Map模块的扩展方法也不难:

module Map =
    let keys (m: Map<'Key, 'T>) =
        Map.fold (fun keys key _ -> key::keys) [] m
Run Code Online (Sandbox Code Playgroud)