अंकों की एक स्ट्रिंग को देखते हुए, मैं स्ट्रिंग में अपनी स्थिति के साथ गैर-शून्य अक्षरों को मैप करने वाले टुपल्स का अनुक्रम प्राप्त करना चाहता हूं। उदाहरण:क्या कोई लाइब्रेरी फ़ंक्शन या ऑपरेटर टुपल बनाने के लिए है?
IN: "000140201"
OUT: { (3, '1'); (4, '4'); (6, '2'); (8, '1') }
समाधान:
let tuples = source
|> Seq.mapi (fun i -> fun c -> (i, c))
|> Seq.filter (snd >> (<>) '0')
ऐसा लगता है (fun i -> fun c -> (i, c))
की तरह एक बहुत अधिक टाइपिंग की तुलना में यह इस तरह के एक सरल और शायद आम आपरेशन के लिए होना चाहिए। यह आवश्यक समारोह की घोषणा करने के लिए आसान है:
let makeTuple a b = (a, b)
let tuples2 = source
|> Seq.mapi makeTuple
|> Seq.filter (snd >> (<>) '0')
लेकिन यह है कि अगर पुस्तकालय snd
समारोह प्रदान करता है, यह भी makeTuple
समारोह प्रदान करना चाहिए मुझे लगता है (और शायद छोटे नाम के साथ), या कम से कम यह होना चाहिए लिखने के लिए अपेक्षाकृत आसान हो। मुझे यह नहीं मिला; क्या मैं कुछ भूल रहा हूँ? मैंने ढांचे के टुपल के साथ कुछ बनाने की कोशिश की। क्रेट, लेकिन मैं यह नहीं समझ सका कि एकल-तर्क अधिभार के अलावा कुछ और कैसे प्राप्त करें।
मामूली सुधार 'Seq.mapi (मजेदार ab -> ए, बी)' –
@ जॉन पामर आह, धन्यवाद।मैंने सोचा कि मुझे पहले उस वाक्यविन्यास में कोई त्रुटि थी, लेकिन मुझे लगता है कि त्रुटि किसी और चीज के कारण हुई थी। – phoog
इसके अलावा, '||>' ऑपरेटर के विपरीत है जो आप चाहते हैं। –