[Kotlin]Map(マップ)の値の合計を取得するには?

Kotlin

どうも、ちょげ(@chogetarou)です。

Map(マップ)の値(value)を合計した値を取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

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 }

コメント

タイトルとURLをコピーしました