2015-11-18 18 views
5

ı bir liste var diyelim (mesela herhangi birinin yerini hatta ile -1)bulun ve Scala koleksiyonundaki öğeyi değiştirin

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 

bu durumda yardımcı olur ve iyi performans olan herhangi koleksiyon işlev veya güzel Scala yolu var mı olduğunu numara?

Ben de düzeni sağlamak istiyoruz, bu yüzden gibi filterNot kullanmak ve listeye diğer öğeler eklemek istemiyorum: (o da verimli değil)

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

ne dersiniz 'Map'? – JimN

+0

@JimN harita sadece bir ilk olarak sorun var. – Omid

cevap

11

Basit & verimli: Tümünü değiştir ürün

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

değiştirin bir öğe

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

Nice catch, sıralanmış – jazmit

+1

Hangi dil bu? :) Ayrıca 'o zaman' kaldırmalısınız. Ama harika, basit ve verimli – Archeg

+0

teşekkürler lol ... son zamanlarda çok fazla LiveScript & Haskell yazdı! – jazmit

İlgili konular