Kotlin mutableMap foreach
我的问题是更多的了解文件。 它说:
fun <K, V> Map<out K, V>.forEach( action: (Entry<K, V>) -> Unit)
但是我不明白如何实现它。 我如何获得循环内的键和值?
我想为listItems
的每个项目计算价格的价值。 地图将一个字符串与一个项目相关联
data class Item(val name: String, val description: String, val price: String, val index: Int)
想象一下listItems
包含了这个:
listItems [“shirt”] – > name:shirt,description:lorem ipsum,price:10,index:0
listItems [“shoes”] – >名称:shoes,描述:价格:30,index:0
所以代码会是这样的:
var total: Int = 0 listItems.forEach { total += parseInt(value.price) }
不过,我不明白如何访问这个参考文档的V
value
您传递给forEach { ... }
的lambda接受一个Entry<K, V>
,您可以使用此条目访问其value
:
listItems.forEach { total += parseInt(it.value.price) }
这相当于使用显式lambda参数 :
listItems.forEach { entry -> total += parseInt(entry.value.price) }
或者,从Kotlin 1.1开始,您可以在lambdas中使用解构 :
listItems.forEach { (_, value) -> total += parseInt(value.price) }
如果你只需要求和值,你可以使用sumBy { ... }
:
val total = listItems.entries.sumBy { parseInt(it.value.price) }
对于一些集合,而不是使用forEach
,我建议去sumBy
或fold
。
您可以通过调用Map<K,V>
上的值来获取底层值。 所以为了得到这个sum
你可以这样做:
val total = listItems.values.sumBy{ it.price.toInt() }
现在没有必要引入一个可变的var
。