加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如果密钥存在,则在Scala映射中向元素添加数字的好方法或不插入新

发布时间:2020-12-16 09:02:13 所属栏目:安全 来源:网络整理
导读:我知道几个类似的问题.它们对我没有帮助 – 如果没有现有密钥,代码就不起作用. 我只需要一些很好的方法来附加Map,将值添加到现有密钥(如果它确实存在)或将其作为新密钥(如果map不包含适当的密钥). 以下代码有效,但我不喜欢它: val a = collection.mutable.M
我知道几个类似的问题.它们对我没有帮助 – 如果没有现有密钥,代码就不起作用.

我只需要一些很好的方法来附加Map,将值添加到现有密钥(如果它确实存在)或将其作为新密钥(如果map不包含适当的密钥).

以下代码有效,但我不喜欢它:

val a = collection.mutable.Map(("k1" -> 1),("k2" -> 5))
val key = "k1"

val elem = a.get(key)
if (elem == None) {
    a += ("k5" -> 200)
} else {
    a.update(key,elem.get + 5)
}

有没有更好的一点?
当前的Scala版本是2.10.4,我目前无法切换到2.11.
可变图不是100%限制,而是优选的.

例如,这是similar question,但我还需要考虑那里没有计算的不存在密钥的情况.至少我们应该理解a.get(key)可以是None或者添加更好的方法.好主意是| |但我想保留基本的Scala 2.10.x.

解决方法

您可以为此创建自己的功能:

def addOrUpdate[K,V](m: collection.mutable.Map[K,V],k: K,kv: (K,V),f: V => V) {
  m.get(k) match {
    case Some(e) => m.update(k,f(e))
    case None    => m += kv
  }
}

addOrUpdate(a,"k1","k5" -> 200,(v: Int) => v + 5)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读