2015-11-18 7 views
5

はのは、私がリストを持っているとしましょう(例えばいずれかを交換しますでもで-1)検索とScalaのコレクション内のアイテムを交換し

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 

ある数は任意の収集機能や、このような状況で役立ち、良好な性能を持っている素敵なScalaの方法はありますか?

私も秩序を維持したいので、私は次のようにfilterNotを使用して、リストに他の項目を追加する必要はありません。(それはまた、効率的ではありません)

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

方法について'マップ'? – 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

これはどの言語ですか? :)また、 'then'を削除する必要があります。しかし、それは素晴らしく、シンプルで効率的です – Archeg

+0

ありがとうlol ...最近書かれたライブスクリプトとハスケル! – jazmit

関連する問題