2012-09-18 21 views
6

मानचित्र को देखते हुए में नक्शे के साथ मिलान पैटर्न:एफ #

let myMap = Map.ofArray [| (1,"A");(2,"B") |] 

वहाँ एक रास्ता मैं एक सूची विपक्ष ऑपरेटर के लिए समान मिलान पैटर्न का उपयोग कर सकते है?

कुछ इस तरह:

match myMap with  //doesn't work 
    (1, value) ->() 
    | _   ->() 

या:

match myMap.TryFind(1) with  //boring 
    Some value ->() 
    | _   ->() 

मैं एक के साथ मिलान पैटर्न क्या कर सकते हैं कैसे:

match myMap with  //doesn't work 
    1::value ->() 
    | _  ->() 

क्या मुझे क्या करना नहीं चाहते हैं यह है नक्शा?

+4

TryFind को कॉल करने वाले सक्रिय सक्रिय लेखक को लेखक। – Brian

उत्तर

13

जैसा कि आपने देखा है, TryFind से अधिक मिलान मानक दृष्टिकोण है और मैं इसे सरल कुंजी जांच के लिए सक्रिय पैटर्न के साथ लपेटने के लिए एक अनिवार्य कारण नहीं सोच सकता। हालांकि, अगर आप सूची विनाशकारी जैसे कुछ के लिए जा रहे हैं (यानी पाया गया मूल्य और नक्शा का शेष) यह काम करना चाहिए:

let (|Found|_|) key map = 
    map 
    |> Map.tryFind key 
    |> Option.map (fun x -> x, Map.remove key map) 

let map = Map.ofList [1, "A"; 2, "B"] 
match map with 
| Found 1 (x, rest) -> printfn "Value: %A, Remaining: %A" x rest 
| _ ->() 

//prints: Value: "A", Remaining: map [(2, "B")] 
+0

Oooooooooooooooo –

+5

पॉल, मुझे लगता है कि आपकी बिल्ली ने कीबोर्ड को मारा। – Daniel

+0

मेरी बिल्ली कहीं भी _near_ सटीक नहीं है। – sblom