使用Map.pick在地图中查找元素

时间:2018-10-15 08:35:58

标签: f#

我上面有类似的东西:

object

Map.pick,来自MSDN:let idx = 9 let map = Map.empty. Add(10, "abc"). Add( 9, "bcd"). Add( 8, "cde"). Add( 7, "def") let result = map |> Map.pick (fun key value -> if idx > key then Some(key) else None) printfn "%A" result

我假设搜索从地图的末尾开始-从7到10,因为结果是7。

但是我想让流程从10开始到7,然后我将得到8。如何实现呢?

1 个答案:

答案 0 :(得分:4)

由于数据结构的设计方式,因此按键顺序存储地图。诸如pick之类的Map函数恰好从最小键开始,但这不是您应该依赖的任何一种方式。

如果这是使用此映射的主要方式,则对于您的总体任务而言,映射可能不是最佳的数据结构选择。但是,如果您确实需要使用地图,我建议您这样做:

map 
|> Map.toSeq
|> Seq.filter (fun (key, _) -> idx > key)
|> Seq.map fst
|> Seq.max
// returns 8

请注意,如果没有符合条件的密钥,那么Seq.max将接收并清空序列并引发异常。