【发布时间】:2016-02-20 16:02:31
【问题描述】:
假设我有一个列表:
val list = List(1, 2, 3, 4, 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
是否有任何收集功能或很好的 Scala 方式可以帮助解决这种情况并具有良好的性能?
我也想保持顺序,所以我不想使用filterNot并将其他项目添加到列表中,例如:(它也没有效率)
val onlyFirst = list.filterNot(_ % 2 != 0) ::: list.filter(_ % 2 == 0).map(x => -1)
【问题讨论】:
-
@JimN 地图只有第一个有问题