gpt4 book ai didi

f# - 使用 Map.pick 在 map 中查找元素

转载 作者:行者123 更新时间:2023-12-01 12:09:45 26 4
gpt4 key购买 nike

我有类似的东西:

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

Map.pick来自 MSDN:搜索 map 以查找给定函数返回 Some 值的第一个元素。

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

但是我想让进程从10开始到7,然后我会得到8,如何实现?

最佳答案

由于数据结构的设计方式, map 按其键的顺序存储。 pick 等 map 函数恰好从最小的键开始,但您不应该依赖它。

如果这是您使用此 map 的主要方式,那么 map 可能不是您整体任务的最佳数据结构选择。但如果您确实需要使用 map ,我建议您这样做:

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

请注意,如果没有满足条件的键,则 Seq.max 将接收并清空序列并抛出异常。

关于f# - 使用 Map.pick 在 map 中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52812678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com