首页 > 解决方案 > 如何仅更改 Seq 的一个元素?

问题描述

我有一个不可变的序列。我需要从中创建一个新的 Seq,只更改一个元素,其索引已提供给我。我该怎么做 ?(我认为由于序列是不可变的,我需要使用一些函数并创建一个新的输出序列,但我不知道如何在“map”函数中检查索引以进行条件更新。)谢谢

标签: scalasequencehigher-order-functionsseq

解决方案


如果元素必须使用某些功能进行转换,f那么

val idx = 2 // given index to transform

mySeq.iterator.zipWithIndex.map { 
  case (e, `idx`) => f(e)
  case (e, _) => e
}.toSeq

如果只需要用另一个给定元素替换它,那么

mySeq.updated(idx, newElement)

如果集合会经常更新,那么请考虑Vector,因为List默认实现Seq没有针对更新进行优化。


推荐阅读