TryGetValue方法返回值或false

时间:2016-02-01 09:10:16

标签: dictionary f#

我有一本字典并获得了价值:

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返回truefalse取决于key是否已找到,但值是通过引用返回的。

1 个答案:

答案 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