मेरे पास एक परिदृश्य है जहां मानक List.groupBy
फ़ंक्शन वह नहीं है जो मैं चाहता हूं, लेकिन मुझे इस फ़ंक्शन के लिए सही नाम नहीं पता है, इसलिए यह खोजना मुश्किल हो रहा है।बार-बार ले जाने के बराबर कॉल करते समय कॉल: क्या इस फ़ंक्शन में "मानक" नाम होता है?
मेरे पास 'T
, और 'T -> 'k
कुंजी-उत्पादक फ़ंक्शन के प्रकार की एक सूची है। आइटम सूची में कुछ हद तक "समूहित" हैं, ताकि जब आप कुंजी फ़ंक्शन के माध्यम से सूची को मैप करते हैं, तो इसके परिणाम में कई बार पंक्ति में एक ही कुंजी होगी, उदा। [1; 1; 1; 2; 2; 1; 1; 3; 3; 3; 1; 1]
। मैं चाहता हूं कि सूचियों की एक सूची प्राप्त करें, जहां आंतरिक सूची में वे सभी आइटम होते हैं जिनके लिए कुंजी-उत्पादक फ़ंक्शन एक ही मान देता है - लेकिन इसे 1 के अलग-अलग अनुक्रमों को समूहबद्ध नहीं करना चाहिए।
दूसरे शब्दों में, मेरा डेटा तारों की एक सूची थी, और कुंजी उत्पादक समारोह String.length
था। तो इनपुट है:
["a"; "e"; "i"; "to"; "of"; "o"; "u"; "and"; "for"; "the"; "I"; "O"]
उत्पादन मैं तलाश कर रहा हूँ होगा:
[["a"; "e"; "i"]; ["to"; "of"]; ["o"; "u"]; ["and"; "for"; "the"]; ["I"; "O"]]
यह का एक और तरीका लगता है करने के लिए: इस सूची के पहले आइटम ले रहे हैं और परिणाम के भंडारण की तरह है कुंजी समारोह बुलाओ। फिर आप पहले सेगमेंट उत्पन्न करने के लिए takeWhile (fun x -> keyFun x = origKeyFunResult)
का उपयोग करेंगे। फिर जब takeWhile
वापस लौटने वाले मूल्यों को रोकता है, तो जब आप इसे रोकते हैं तो रिकॉर्ड करते हैं, और keyFun x
का मान उस प्रथम मान पर है जो मूल परिणाम नहीं लौटाता है - और वहां से आगे बढ़ता है। (सिवाय इसके कि वह ओ (एन * एम) होगा जहां एम अनुक्रमों की संख्या है, और कई मामलों में ओ (एन^2) में भंग हो जाएगा - जबकि ओ (एन) समय में इस कार्य को लागू करना संभव होना चाहिए)।
अब, मैं उस समारोह को बहुत आसानी से लिख सकता हूं। यह सवाल नहीं है। मैं यह जानना चाहता हूं कि इस फ़ंक्शन के लिए मानक नाम है या नहीं। क्योंकि मैंने सोचा था कि इसे groupBy
कहा जाएगा, लेकिन यह कुछ और है। (List.groupBy String.length
[(1, ["a"; "e"; "i"; "o"; "u"; "I"; "O"]); (2, ["to"; "of"]), (3, ["and"; "for"; "the"])]
लौटाएगा, लेकिन इस मामले में जो मैं चाहता हूं वह "ए/ई/आई", "ओ/यू", और "आई/ओ" सूचियों को अलग रहने के लिए है, और मुझे वह मूल्य नहीं चाहिए आउटपुट डेटा में होने वाली कुंजी-उत्पन्न रिटर्न)।
शायद इस फ़ंक्शन के लिए मानक नाम नहीं है। लेकिन अगर वहाँ है, तो यह क्या है?
मुझे नहीं लगता कि वहाँ एक मानक है नाम। आपको आगे बढ़ना चाहिए और इसे लिखना चाहिए; आपने पहले ही कहा है कि लिखना आसान है, और फ़ंक्शन के लिए जो कोड आप लिखते हैं वह दस्तावेज करने के लिए काम करेगा जो यह करता है। –
इसे गणित में 'गदरबी' कहा जाता है, जिसमें कुछ हद तक कार्यात्मक जड़ें होती हैं। – s952163
मेरे अनुभव में इस समारोह को 'स्प्लिट' नाम दिया गया था। यह तारों पर विभाजित कार्य को संदर्भित करता है जो समान काम करता है। –