gpt4 book ai didi

F# - 类似于 List.find 的功能,但搜索字典的任何键

转载 作者:行者123 更新时间:2023-12-02 01:55:30 24 4
gpt4 key购买 nike

我想创建一个类似于 List.find 的 F# 函数,但不是搜索单个值,我想搜索字典的任何键并返回相应的字典值。
例如,这是我正在尝试做的(糟糕的)实现。

let dict1=dict[(1,"A");(2,"B");(3,"C");(4,"D");(5,"E");(6,"F")]

let findInDict l =
let mutable found=false
let mutable value=""
for elem in l do
let f,v=dict1.TryGetValue(elem)
value<-if f && not found then v else value
found<-if not found then f else found
value

findInDict [9;2;5]


>

val dict1 : System.Collections.Generic.IDictionary<int,string>
val findInDict : l:seq<int> -> string
val it : string = "B"

什么是功能等价物?

最佳答案

这个功能几乎感觉有点矫枉过正。您可以使用列表理解在一行中完成此操作:

[for x in [9;4;5] do if dict1.ContainsKey x then yield dict1.[x]]

编辑:

重新阅读您的问题后,我意识到上述内容并不是您要找的。
let rec findAValue l =
match l with
| [] -> None
| x::xs -> if dict1.ContainsKey x then Some(dict1.[x]) else findAValue xs

或更简洁地说:
let rec findAValue = function 
| [] -> None
| x::xs -> if dict1.ContainsKey x then Some(dict1.[x]) else findAValue xs

更简洁:
let findAValue = List.tryPick (fun x-> if dict1.ContainsKey x then Some(dict1.[x]) else None)

let highPerformanceFindAValue = List.tryPick (fun x-> match dict1.TryGetValue x with
| true, value->Some(value)
| _ -> None)

在没有找到值的情况下,结果是 None否则是 Some(value) .

关于F# - 类似于 List.find 的功能,但搜索字典的任何键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20335404/

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