2016-02-01 13 views
5

मैं एक शब्दकोश है और मूल्य मिलता है:वापसी मान या TryGetValue विधि द्वारा झूठी

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) 

सच

झूठी

सच

मैं 3th में झूठी जरूरत कहते हैं। यदि कुंजी नहीं मिली है तो मूल्य या false कैसे प्राप्त करें? समस्या यह है कि TryGetValue रिटर्न true या falsekey पर निर्भर करता है या नहीं, लेकिन संदर्भ संदर्भ द्वारा वापस किया जाता है।

+0

संकेत बदलने के लिए 'SND है |> (<) 'थोड़ा और कॉम, कुछ के लिए कुछ –

उत्तर

7

यह आपके जीवन को आसान अगर आप TryGetValue के लिए एक एडाप्टर है कि अधिक एफ # की तरह परिभाषित करेंगे:

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 
संबंधित मुद्दे