【问题标题】:How to replace value in map for a key based on a condition in scala如何根据scala中的条件替换映射中的值
【发布时间】:2017-05-26 06:47:50
【问题描述】:

我有几个不可变的地图记录,例如:

val map = Map("number"->7,"name"->"Jane","city"->"New York")

我需要为每条记录识别"name"键并检查其值。如果值为"Jane",我需要替换为"Doe"并更新地图记录。

【问题讨论】:

标签: scala maps immutable-collections


【解决方案1】:

这可以通过简单的映射操作和模式匹配来实现。

scala> val dictionary = Map("number"->7,"name"->"Jane","city"->"New York")
map: scala.collection.immutable.Map[String,Any] = Map(number -> 7, name -> Jane, city -> New York)

scala> dictionary map {
     |   case ("name","Jane") => "name" -> "Doe"
     |   case x => x
     | }
res3: scala.collection.immutable.Map[String,Any] = Map(number -> 7, name -> Doe, city -> New York)

【讨论】:

    【解决方案2】:

    一个简单的if else 逻辑就可以解决问题

    map.map(k => {
      if(k._1.toString.equalsIgnoreCase("name") && k._2.toString.equalsIgnoreCase("jane"))
        (k._1, "Doe")
      else
        k
    })
    

    或者一个简单的match case 应该可以解决问题,正如@rogue-one 所解释的那样

    map.map(k => (k._1.toString, k._2.toString) match{
      case ("name", "Jane") => k._1 -> "Doe"
      case _ => k
    })
    

    谢谢

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 1970-01-01
      • 2021-08-16
      • 2017-01-27
      • 2023-02-15
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 2014-04-24
      相关资源
      最近更新 更多