【问题标题】:Update (or Replace) item(s) in immutable collection in Scala在 Scala 中更新(或替换)不可变集合中的项目
【发布时间】:2016-08-17 17:56:33
【问题描述】:

在 Seq 中更新(或替换)项目的最佳做法是什么?

case class Minion(id: Int, name: String, motivation: Int)
val minions: Seq[Minion] = Seq(
  Minion(1, "Bob", 50),
  Minion(2, "Kevin", 50),
  Minion(3, "Stuart", 50))

我想获得新的收藏

Seq(
  Minion(1, "Bob", 50),
  Minion(2, "Kevin", 50),
  Minion(3, "Stuart", 100))

最好的方法是什么?

【问题讨论】:

    标签: scala collections immutability scala-collections


    【解决方案1】:

    使用updated:

    // first argument is index (zero-based) - so using 2 to replace 3rd item:
    scala> minions.updated(2, Minion(3, "Stuart", 100))
    res0: Seq[Minion] = List(Minion(1,Bob,50), Minion(2,Kevin,50), Minion(3,Stuart,100))
    

    或者,不重复新Minion的不变属性:

    scala> minions.updated(2, minions(2).copy(motivation = 100))
    res1: Seq[Minion] = List(Minion(1,Bob,50), Minion(2,Kevin,50), Minion(3,Stuart,100))
    

    【讨论】:

      【解决方案2】:

      地图也可以,而且可能比updated 更容易阅读:

      minions.map {
        case Minion(2, name, n) => Minion(2, name, 100)
        case m => m
      }
      

      除了可读性之外,与updated 相比,它的一个好处是您可以一次修改多个元素。

      【讨论】:

        猜你喜欢
        • 2016-02-20
        • 1970-01-01
        • 2015-01-17
        • 2012-01-07
        • 2017-03-29
        • 1970-01-01
        • 2017-10-10
        • 2014-06-02
        • 2019-09-20
        相关资源
        最近更新 更多