2012-06-01 15 views

उत्तर

10

गैर- teleological उत्तर यह है कि containsSeqLike में परिभाषित किया गया है लेकिन ParSeqLike में नहीं है।

है कि आपके जिज्ञासा को संतुष्ट नहीं है, आप पा सकते हैं कि SeqLike के contains इस प्रकार परिभाषित किया गया है:

def contains(elem: Any): Boolean = exists (_ == elem) 

तो अपने उदाहरण के लिए आप

List.range(0,100).par.exists(_ == 2) 

ParSeqLike एक याद आ रही है लिख सकते हैं कुछ अन्य तरीकों के साथ-साथ, जिनमें से कुछ कुशलतापूर्वक कार्यान्वित करना कठिन होगा (उदाहरण के लिए indexOfSlice) और कुछ कम स्पष्ट कारणों के लिए (उदाहरण के लिए combinations - शायद क्योंकि यह केवल छोटे डेटासेट पर उपयोगी है)। लेकिन क्या आप भी .seq उपयोग करें यदि आप एक समानांतर संग्रह हो सकता है वापस पाने के लिए रैखिक संस्करण के लिए और अपने तरीकों वापस पाने:

List.range(0,100).par.seq.contains(2) 

के लिए क्यों पुस्तकालय डिजाइनरों छोड़ दिया बाहर के रूप में ... मैं पूरी तरह अनुमान लगा रहा हूँ, लेकिन हो सकता है कि वे सादगी के लिए तरीकों की संख्या को कम करना चाहते थे, और exists का उपयोग करना लगभग आसान है।

यह भी सवाल है, क्यों contains बल्कि सभी संग्रह, GenTraversableOnce, जहां आप पाते हैं exists के granddaddy पर से SeqLike पर परिभाषित किया गया है को जन्म देती है? एक संभावित कारण यह है कि Map के लिए containsSet और Seq पर इसके लिए एक अलग तरीका है। Map[A,B] एक Traversable[(A,B)] है, इसलिए contains को Traversable, contains के लिए परिभाषित किया गया था, एक tuple (A,B) तर्क लेने की आवश्यकता होगी; हालांकि Map का contains केवल A तर्क लेता है। यह देखते हुए, मुझे लगता है कि contains को GenSeqLike में परिभाषित किया जाना चाहिए - शायद यह एक निरीक्षण है जिसे ठीक किया जाएगा।

(मैंने सोचा था कि पहले समानांतर अनुक्रमों में contains नहीं है क्योंकि समानांतर संग्रह पर अपना लक्ष्य ढूंढने के बाद आप कहां रुकना चाहते हैं, यह रैखिक संस्करण से बहुत कम कुशल है (विभिन्न धागे बहुत अनावश्यक काम करते हैं मान मिलने के बाद: this question देखें), लेकिन यह सही नहीं हो सकता है क्योंकि exists है।)

+0

'indexOfSlice' समझा जाएगा क्योंकि समानांतर अनुक्रमों के क्रम में, यह सिर्फ इतना है कि वे समानांतर संचालन निष्पादित नहीं करते हैं आदेश। लेकिन एक कुशल, स्केलेबल 'इंडेक्सऑफस्लिस' अभी तक लागू नहीं किया गया है। – axel22

+0

@ axel22 धन्यवाद, अपडेट किया गया। –

+0

धन्यवाद बहुत उपयोगी! मुझे लगता है कि उन्होंने अभी तक इसे लागू नहीं किया है क्योंकि यह काम नहीं करता है क्योंकि आप इसकी उम्मीद करेंगे, जैसे ही इसे एक मूल्य मिल जाए। – placeybordeaux

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