【问题标题】:Find and Replace item in Scala collection在 Scala 集合中查找和替换项目
【发布时间】: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 地图只有第一个有问题

标签: scala scala-collections


【解决方案1】:

简单高效: 替换所有项目

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

替换一项

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

【讨论】:

  • 这是什么语言? :) 您还应该删除then。但它很棒、简单、高效
猜你喜欢
  • 2016-08-17
  • 2019-09-19
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2020-09-29
相关资源
最近更新 更多