2009-09-26 12 views
9

मैं आज Seq.first का उपयोग करने की कोशिश कर रहा था, और संकलक कहता है कि इसे Seq.tryPick के पक्ष में हटा दिया गया है। यह कहता है कि यह एक फ़ंक्शन लागू करता है और कुछ परिणाम देता है जो कुछ देता है। मुझे लगता है कि मैं बस मजेदार एक्स -> एक्स! = 0 कह सकता हूं क्योंकि मुझे पता है कि पहला व्यक्ति मेरे मामले में कुछ लौटाएगा, लेकिन यहां लगाने के लिए उचित बाधा क्या है? सही वाक्यविन्यास क्या है?अनुक्रम का पहला तत्व प्राप्त करने के लिए मैं tryPick का उपयोग कैसे करूं?

स्पष्ट करने के लिए, मैं प्रारूप में इसका उपयोग करना चाहते:

देना foo (एक्स: seq) = x.filter (मज़ा एक्स -> x> 0) |> Seq.tryPick (??)

उत्तर

17

कुंजी है कि 'Seq.first' पहला तत्व वापस नहीं किया था, बल्कि यह पहला तत्व है कि कुछ 'चुनें' विधेय का मिलान नहीं हुआ दिखाई:

let a = [1;2;3] 
// two ways to select the first even number (old name, new name) 
let r1 = a |> Seq.first (fun x -> if x%2=0 then Some(x) else None) 
let r2 = a |> Seq.tryPick (fun x -> if x%2=0 then Some(x) else None) 

तुम सिर्फ पहला तत्व चाहते हैं, Seq.head

012 का उपयोग करें
let r3 = a |> Seq.head 
+0

धन्यवाद, मैंने अभी 'seq.first' की कोशिश की और उसे बहिष्कृत संदेश मिला, लेकिन पहले कभी इसका उपयोग नहीं किया है, इसलिए मुझे सटीक वाक्यविन्यास नहीं पता था। Seq.hd सही काम करता है। – esac

+6

एफवाईआई, ऐसा लगता है कि यह F # 2.0 में 'Seq.head' में बदल दिया गया है। – elo80ka

संबंधित मुद्दे

 संबंधित मुद्दे