【问题标题】:Better way to create new key in map if key doesnt exist in Scala?如果 Scala 中不存在键,则在映射中创建新键的更好方法?
【发布时间】:2020-10-28 13:59:57
【问题描述】:

我在 Scala 中有以下 list of maps

val list =   List(Map( "age" -> 25, "city" -> "London", "last_name" -> "Smith"), 
         Map("city" -> "Berlin", "last_name" -> "Robinson"))

我希望遍历映射列表并检查键 "age" 是否存在。如果没有,我想创建条目并将其放入地图中。到目前为止,我已经尝试过:

val tmp = list.map( item => if (!item.contains("age")) item.updated("age",5) else item)
print(tmp)

效果很好,我只是想知道是否有更有效的方法来做到这一点(也许是理解或其他什么?)!任何建议都会被采纳

【问题讨论】:

  • list val 类型被推断为 Seq[Map[String, Any]] 因为你混合了 int 和 string 值类型。所以最初的列表可能有问题。
  • for-comprehensions 只是 mapflatMap 等的语法糖。所以那里没有效率增益。
  • 您想检查至少一张地图是否有密钥?还是所有人都必须拥有它?

标签: scala dictionary data-structures functional-programming


【解决方案1】:

我会这样做。

val newList = 
  list.map{m => if (m.keySet("age")) m else m + ("age" -> "5")}

请注意,如果您不将值 5 设为 String,则结果是 Map[String,Any],这不是您想要的。

【讨论】:

  • 为什么是keySet 而不是contains?当然,它有效,但似乎不太明显。
  • 这不完全一样吗?
猜你喜欢
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2021-08-25
  • 2023-03-16
  • 2016-05-20
相关资源
最近更新 更多