2015-09-30 16 views
11

मुझे हाल ही में स्लाइडिंग (एन, एन) का उपयोग करके पाया गया है जब मुझे एन तत्वों के समूहों में संग्रह को फिर से संसाधित किए बिना संग्रह को पुन: संसाधित करने की आवश्यकता है। मैं सोच रहा था कि समूहबद्ध (एन) का उपयोग करके उन संग्रहों को फिर से शुरू करना अधिक सही होगा। मेरा सवाल यह है कि प्रदर्शन के मामले में इस विशिष्ट मामले के लिए एक या दूसरे का उपयोग करने का एक विशेष कारण है।स्कैला: स्लाइडिंग (एन, एन) बनाम समूहित (एन)

val listToGroup = List(1,2,3,4,5,6,7,8) 
listToGroup: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8) 

listToGroup.sliding(3,3).toList 
res0: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8)) 

listToGroup.grouped(3).toList 
res1: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8)) 

उत्तर

7

कारण उपयोग करने के लिए grouped के बजाय sliding वास्तव में ही लागू होता है जब आप 'विंडोज़' है लंबाई की तुलना में अलग से होना चाहता हूँ से क्या आप 'स्लाइड' (कि sliding(m, n) जहां m != n का उपयोग कर कहने के लिए है,): som-snytt एक टिप्पणी में बताते हैं

listToGroup.sliding(2,3).toList 
//returns List(List(1, 2), List(4, 5), List(7, 8)) 

listToGroup.sliding(4,3).toList 
//returns List(List(1, 2, 3, 4), List(4, 5, 6, 7), List(7, 8)) 

हैं, वहाँ, किसी भी प्रदर्शन अंतर होने के लिए के रूप में उन दोनों को एक नया GroupedIterator returnining रूप Iterator भीतर कार्यान्वित किया जाता है नहीं जा रहा है। हालांकि, sliding(n, n) से grouped(n) लिखना आसान है, इसलिए आपका कोड क्लीनर और इसके इच्छित व्यवहार में अधिक स्पष्ट होगा, इसलिए मैं grouped(n) की अनुशंसा करता हूं।

sliding उपयोग करने के लिए जहां, इस उदाहरण जहां grouped बस पर्याप्त नहीं है पर विचार के लिए एक उदाहरण के रूप में:

नंबरों की सूची को देखते हुए, लंबाई में से किसी sublist की सबसे बड़ी राशि मिल जाए 4.

अब , एक तरफ तथ्य यह है कि एक गतिशील प्रोग्रामिंग दृष्टिकोण एक अधिक कुशल परिणाम का उत्पादन कर सकते डाल, इस हल किया जा सकता है:

def maxLengthFourSublist(list: List[Int]) = { 
    list.sliding(4,1).map(_.sum).max 
} 

आप यहाँ grouped उपयोग करने के लिए थे, तो आप नहीं सभी उप-सूचियों मिलेगा, एस ओ sliding अधिक उपयुक्त है।

+3

कार्यान्वयन DRY है, इसलिए इससे कोई फर्क नहीं पड़ता कि आप प्रदर्शन के लिए क्या कहते हैं। https://github.com/scala/scala/blob/v2.11.7/src/library/scala/collection/Iterator.scala#L1039 –

+0

@ som-snytt जानना अच्छा है! मैं इसके साथ अपडेट करूंगा! – childofsoong

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