我有一本字典并获得了价值:
open System.Collections.Generic
let price = Dictionary<string, int>()
Array.iter price.Add [|"apple", 5; "orange", 10|]
let buy key = price.TryGetValue(key) |> snd |> (<)
printfn "%A" (buy "apple" 7)
printfn "%A" (buy "orange" 7)
printfn "%A" (buy "banana" 7)
真
假
真
我在第3次电话中需要假。如果找不到密钥,如何获得价值或false
?问题是TryGetValue
返回true
或false
取决于key
是否已找到,但值是通过引用返回的。
答案 0 :(得分:7)
如果为TryGetValue
定义一个更像F#的适配器,它会让您的生活更轻松:
let tryGetValue k (d : Dictionary<_, _>) =
match d.TryGetValue k with
| true, v -> Some v
| _ -> None
有了这个,您现在可以像这样定义buy
函数:
let buy key limit =
price |> tryGetValue key |> Option.map ((>=) limit) |> Option.exists id
这可以为您提供所需的结果:
> buy "apple" 7;;
val it : bool = true
> buy "orange" 7;;
val it : bool = false
> buy "banana" 7;;
val it : bool = false