どうも、ちょげ(@chogetarou)です。
Map(マップ)の値(value)を合計した値を取得する方法を紹介します。
方法

Map(マップ)の値(value)を合計した値を取得する方法は、3つあります。
sum()
1つ目は、sum()を使う方法です。
まず、map.values
のように、Mapのvaluesプロパティにアクセスします。
そして、valuesプロパティからsum()を呼び出します。
val result = map.values.sum()
上記のsum()は、 valuesプロパティのアクセス元のMapの値の合計を返します。
使用例
fun main() {
val numbers = mapOf(
"one" to 1,
"two" to 2,
"three" to 3,
"four" to 4,
"five" to 5
)
val result = numbers.values.sum()
println(result)
}
出力:
15
reduce()
2つ目は、reduce()を使う方法です。
まず、map.values
のように、Mapのvaluesプロパティにアクセスします。
valuesプロパティからreduce{}を呼び出します。
そして、reduce{}のクロージャーに2つの引数の足し算を指定します。
val result = map.values.reduce { x,y -> x + y }
上記のreduce()は、 valuesプロパティのアクセス元のMapの値の合計を返します。
使用例
fun main() {
val numbers = mapOf(
"one" to 1,
"two" to 2,
"three" to 3,
"four" to 4,
"five" to 5
)
val result = numbers.values.reduce { x,y -> x + y }
println(result)
}
出力:
15
sumOf()
3つ目は、sumOf()を使う方法です。
まず、map.values
のように、Mapのvaluesプロパティにアクセスします。
valuesプロパティからsumOf{}を呼び出します。
sumOf{}のクロージャーに「it」を指定します。
val result = map.values.sumOf { it }
上記のsumOf()は、 valuesプロパティのアクセス元のMapの値の合計を返します。
また、値のプロパティの合計値を取得するには、sumOf{}のクロージャー内でitからプロパティにアクセスします。
//prop=プロパティ
val result = map.values.sumOf { it.prop }
使用例
data class Person(val name: String, val age: Int)
fun main() {
val numbers = mapOf(
"one" to 1,
"two" to 2,
"three" to 3,
"four" to 4,
"five" to 5
)
val persons = mapOf(
"one" to Person("Taro", 22),
"two" to Person("Jiro", 18),
"three" to Person("Saburo", 15),
)
val result = numbers.values.sumOf { it }
val result2 = persons.values.sumOf { it.age }
println(result)
println(result2)
}
出力:
15
55
まとめ
Map(マップ)の値の合計を取得する方法は、次の3つです。
- sum()を使う方法
val result = map.values.sum()
- reduce()を使う方法
val result = map.values.reduce { x,y -> x + y }
- sumOf()を使う方法
val result = map.values.sumOf { it }
コメント