我上面有类似的东西:
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。如何实现呢?
答案 0 :(得分:4)
由于数据结构的设计方式,因此按键顺序存储地图。诸如pick
之类的Map函数恰好从最小键开始,但这不是您应该依赖的任何一种方式。
如果这是使用此映射的主要方式,则对于您的总体任务而言,映射可能不是最佳的数据结构选择。但是,如果您确实需要使用地图,我建议您这样做:
map
|> Map.toSeq
|> Seq.filter (fun (key, _) -> idx > key)
|> Seq.map fst
|> Seq.max
// returns 8
请注意,如果没有符合条件的密钥,那么Seq.max
将接收并清空序列并引发异常。