mapIndexedでインデックスを活かした変換処理を実現する方法

Kotlin
記事内に広告が含まれる場合があります

リストの要素を一括変換するときは map が定番ですが、「要素の位置(インデックス)も計算に使いたい」ケースでは mapIndexed が活躍します。今回はその基本から応用までをまとめて紹介します。

1. mapIndexedとは

map はリストの要素を一括で変換する定番メソッドですが、mapIndexed を使うと 「要素の位置(インデックス)」 も一緒に扱えます。

  • (index, value) でラムダが呼ばれる
  • 変換後も新しいリストとして返る

位置に応じたロジックをサクッと書きたいときに便利です。


2. 基本的な使い方

Kotlin
val numbers = listOf(5, 10, 15)

val result = numbers.mapIndexed { idx, value ->
    // idx: 0,1,2  / value: 5,10,15
    "[$idx]:${value * 2}"
}

println(result)  // [ [0]:10, [1]:20, [2]:30 ]
  • 第一引数がインデックス、第二が要素
  • map と同様に戻り値で新リストを取得

3. 実用例① 行番号付きタグ生成

Kotlin
val items = listOf("apple", "banana", "cherry")

val tagged = items.mapIndexed { i, v ->
    "Item${i + 1}: $v"
}

println(tagged)
// [Item1: apple, Item2: banana, Item3: cherry]

画面表示やログで「何行目か」を一目でわかるようにしたいときに。


4. 実用例② 交互配色パターン

Kotlin
val rows = (0 until 6).toList()

val bgColors = rows.mapIndexed { i, _ ->
    if (i % 2 == 0) "#ffffff" else "#f0f0f0"
}

println(bgColors)
// [#ffffff, #f0f0f0, #ffffff, #f0f0f0, #ffffff, #f0f0f0]

テーブルやリストの偶数行/奇数行に別スタイルを当てるときに直感的。


5. 実用例③ 重み付けスコア計算

Kotlin
val scores = listOf(80, 70, 60)

val weighted = scores.mapIndexed { i, s ->
    s + (i * 5)  // 1行目+0, 2行目+5, 3行目+10
}

println(weighted)
// [80, 75, 70]

インデックスを“重み”に見立ててスコアを調整するときなど。


6. まとめ

  • mapIndexed「値+位置」 を同時に扱う変換に最適
  • 行番号ラベル、交互スタイル、重み付け…ちょっとした工夫に便利
  • 要素位置が不要なら map、必要なときは mapIndexed を選択

位置情報を活かすだけで、コードの見通しや動作イメージがグッと分かりやすくなります。

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