2015-11-18 6 views
5

चलो कहते हैं कि मैं एक सूची है चलो (जैसे किसी भी जगह ले संख्या भी साथ -1)का पता लगाएं और स्काला संग्रह में आइटम की जगह

val filteredList = list.zipWithIndex.filter(_._2 % 2 == 0) 
val onlyFirst = list.updated(filteredList.head._2, -1) 
val all = for(i <- list) yield if(i % 2 ==0) -1 else i 

वहाँ किसी भी संग्रह समारोह या अच्छा स्काला तरीका है कि इस स्थिति में मदद करता है और एक अच्छा प्रदर्शन है है है?

मैं भी आदेश रखना चाहते हैं, तो मैं नहीं है filterNot का उपयोग करें और सूची में अन्य आइटम जोड़ने के लिए की तरह हैं: (यह भी कुशल नहीं है)

val onlyFirst = list.filterNot(_ % 2 != 0) ::: list.filter(_ % 2 == 0).map(x => -1) 
+2

कैसे के बारे में 'Map'? – JimN

+0

@JimN मानचित्र में केवल पहले के लिए समस्या है – Omid

उत्तर

11

सरल & कुशल: सभी बदलें

list.map(x => if (x % 2 == 0) -1 else x) 

बदलें आइटम एक आइटम

val index = list.indexWhere(_ % 2 == 0) 
list.updated(index, -1) 
+0

अच्छा पकड़, क्रमबद्ध – jazmit

+1

यह कौन सी भाषा है? :) आपको 'फिर' भी हटा देना चाहिए। लेकिन यह बहुत अच्छा, सरल और प्रभावशाली – Archeg

+0

धन्यवाद lol ... हाल ही में बहुत अधिक लाइवस्क्रिप्ट और हास्केल लिखा है! – jazmit

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