Menu
Coddy logo textTech

SubListを使ったリストのスライス

CoddyのKotlinジャーニー「基礎」セクションの一部。レッスン 79/93。

コレクション全体ではなく、リストの一部を抽出して操作する必要がある場合があります。subList()メソッドを使うと、既存のリストから特定の範囲の要素をビューとして作成できます。

subList()メソッドは、開始インデックス(包含)と終了インデックス(排他)の2つのパラメーターを受け取ります。つまり、開始インデックスの要素は含まれますが、終了インデックスの要素は含まれません。

val numbers = listOf(10, 20, 30, 40, 50)
val slice = numbers.subList(1, 4)
println(slice)  // [20, 30, 40]

この例では、subList(1, 4) はインデックス 1 からインデックス 4 まで(インデックス 4 は含まない)の要素を抽出します。これにより、2 番目、3 番目、4 番目の要素が得られます。

結果として得られるサブリストは、元のリストのビューであり、コピーではありません。これは可変リストを扱う際に理解しておくことが重要です。元のリストへの変更がサブリストに影響を与える可能性があるためです。

読み取り専用リストのほとんどの用途では、要素の範囲にアクセスするために単純に使用できます。

val days = listOf("Mon", "Tue", "Wed", "Thu", "Fri")
val midWeek = days.subList(1, 4)
println(midWeek)  // [Tue, Wed, Thu]
challenge icon

チャレンジ

中級

整数のリストと、範囲を表す2つのインデックスが与えられます。subList()を使用してサブリストを抽出し、抽出した要素の合計を出力してください。

入力形式:

  • 1行目: 要素数を表す整数 n
  • 次の n 行: リストに追加する整数
  • 次の行: 開始インデックス(含む)
  • 最後の行: 終了インデックス(含まない)

出力形式:

抽出したサブリストの要素の合計を出力してください。

例:

リストが [5, 10, 15, 20, 25] で、開始インデックスが 1、終了インデックスが 4 の場合、サブリストは [10, 15, 20] となり、出力は 45 になります。

自分で試してみよう

fun main() {
    val n = readLine()!!.toInt()
    val list = mutableListOf<Int>()
    
    repeat(n) {
        list.add(readLine()!!.toInt())
    }
    
    val startIndex = readLine()!!.toInt()
    val endIndex = readLine()!!.toInt()
    
    // TODO: 以下にコードを書いてください
    // subList() を使って startIndex から endIndex までの要素を抽出する
    // 抽出した要素の合計を計算して出力する
    
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Kotlinプレイグラウンド