2013-01-02 15 views
9

ठीक नीचे, Iterator के ++ विधि का कोड:Iterators संयोजन प्रदर्शन

/** Concatenates this iterator with another. 
     * 
     * @param that the other iterator 
     * @return a new iterator that first yields the values produced by this 
     * iterator followed by the values produced by iterator `that`. 
     * @note Reuse: $consumesTwoAndProducesOneIterator 
     * @usecase def ++(that: => Iterator[A]): Iterator[A] 
     */ 
     def ++[B >: A](that: => GenTraversableOnce[B]): Iterator[B] = new Iterator[B] { 
     // optimize a little bit to prevent n log n behavior. 
     private var cur : Iterator[B] = self 
     // since that is by-name, make sure it's only referenced once - 
     // if "val it = that" is inside the block, then hasNext on an empty 
     // iterator will continually reevaluate it. (ticket #3269) 
     lazy val it = that.toIterator 
     // the eq check is to avoid an infinite loop on "x ++ x" 
     def hasNext = cur.hasNext || ((cur eq self) && { 
      it.hasNext && { 
      cur = it 
      true 
      } 
     }) 
     def next() = { hasNext; cur.next() } 
     } 

टिप्पणी में, यह कहते हैं: // optimize a little bit to prevent n log n behavior.

दो पुनरावर्तकों को कब और कैसे जोड़ना एन लॉग एन के लिए नेतृत्व करेंगे?

+9

इसका उल्लेख "प्रोग्रामिंग इन स्कैला द्वितीय संस्करण" में किया गया है। लॉग एन पुनरावृत्ति के प्रत्येक चरण पर निर्णय लेने के द्वारा पेश किए गए अतिरिक्त संकेत के कारण होता है यदि अगला तत्व पहले या दूसरे पुनरावर्तक से आता है। –

+2

यदि कोई इटेटरेटर खाली है, तो वह हर समय प्रदर्शन करेगा, फिर कॉन्सटेनेशन इटरेटर्स द्वारा समेकित संगत करके आपको एक बुरी जटिलता मिल जाएगी, जिसे 'cur' – idonnie

+0

पर एक नया मान पुन: असाइन करके तय किया गया था :) यह बहुत स्पष्ट है । – Mik378

उत्तर

2

लोकप्रिय मांग करके, मैं अपने ही सवाल का जवाब, बस ऊपर @Paolo Falabella टिप्पणी उद्धृत:

यह में उल्लेख किया गया है "स्काला 2 एड में प्रोग्रामिंग।"। लॉग एन के प्रत्येक चरण पर निर्णय लेने के द्वारा पेश किया गया अतिरिक्त संकेत है, यदि अगला तत्व पहले या दूसरे इटरेटर से आता है तो पुनरावृत्ति।

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