【问题标题】:Increase value in mutable map增加可变映射中的值
【发布时间】:2021-06-16 22:17:23
【问题描述】:

我创建了一个mutableMap<String, Int> 并为0 创建了一个记录“示例”。我怎样才能增加价值,例如到0 + 3 ?

【问题讨论】:

标签: kotlin


【解决方案1】:

您可以使用getOrDefault 函数获取旧值或 0,添加新值并将其分配回地图。

val map = mutableMapOf<String,Int>()
map["Example"] = map.getOrDefault("Example", 0) + 3

或者使用标准Map接口中的merge函数。

val map = mutableMapOf<String,Int>()
map.merge("Example", 3) {
    old, value -> old + value
}

或更紧凑:

map.merge("Example",3, Int::plus)

【讨论】:

  • ... 作为旁注:如果您还想在某些条件下删除某些条目,Map.compute 也可能会有所帮助...或者一般看看Map-interface那么
  • 如果您使用的是安卓系统,请注意这需要 API 24
【解决方案2】:

我是怎么做的:

val map = mutableMapOf<String, Int>()

map[key] = (map[key] ?: 0) + 1

【讨论】:

    【解决方案3】:

    如果 API 级别大于 23,您可以使用 getOrDefault。否则,您可以使用 elvis 运算符

    val map = mutableMapOf<String,Int>()
    val value = map["Example"] ?: 0
    map["Example"] = value + 3
    

    【讨论】:

      【解决方案4】:

      你可以定义

      fun <T> MutableMap<T, Int>.inc(key: T, more: Int = 1) = merge(key, more, Int::plus)
      

      所以你可以这样

      map.inc("Example",3)
      map.inc("Example")
      otherMap.inc(otherObject)
      

      【讨论】:

        猜你喜欢
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-21
        相关资源
        最近更新 更多