Menu
Coddy logo textTech

TakeとDropを使ったリストのスライス

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

Kotlin には、リストの先頭または末尾から要素だけが必要な場合に、リストの一部を取り出すための、より簡単な 2 つのメソッドがあります。take()drop() です。

take()メソッドは、最初のn個の要素を含む新しいリストを返します。

val numbers = listOf(10, 20, 30, 40, 50)
val firstThree = numbers.take(3)
println(firstThree)  // [10, 20, 30]

drop()メソッドは反対の動作をします。最初のn個の要素をスキップし、残りを返します。

val numbers = listOf(10, 20, 30, 40, 50)
val afterTwo = numbers.drop(2)
println(afterTwo)  // [30, 40, 50]

subList()とは異なり、これらのメソッドはビューではなく独立したコピーを返します。また、「最初のいくつか」または「最初のいくつかを除くすべて」の要素だけが必要な場合、より読みやすくなります。

両方のメソッドを組み合わせて、中央部分を取り出すことができます:

val letters = listOf("A", "B", "C", "D", "E")
val middle = letters.drop(1).take(3)
println(middle)  // [B, C, D]

存在する要素数を超えて要素を要求した場合、これらのメソッドはエラーをスローせず、利用可能な要素だけを返します。

val short = listOf(1, 2)
println(short.take(10))  // [1, 2]
println(short.drop(10))  // []
challenge icon

チャレンジ

中級

整数のリストと、2つの数値を受け取ります。1つ目は先頭から削除する要素数、2つ目は削除後に取得する要素数です。

drop()take()を組み合わせてリストの中央部分を抽出し、抽出した要素を出力してください。

入力形式:

  • 1行目: 要素数を表す整数n
  • 次のn行: リストに追加する整数
  • 次の行: 先頭から削除する要素数
  • 最後の行: 削除後に取得する要素数

出力形式:

Kotlinのデフォルトのリスト形式で結果のリストを出力してください。

例:

リストが[10, 20, 30, 40, 50, 60]で、dropが2、takeが3の場合、出力は次のようになります。

[30, 40, 50]

自分で試してみよう

fun main() {
    // 要素の数を読み取る
    val n = readLine()!!.toInt()
    
    // リストの要素を読み取る
    val list = mutableListOf<Int>()
    for (i in 1..n) {
        list.add(readLine()!!.toInt())
    }
    
    // dropとtakeの値を読み取る
    val dropCount = readLine()!!.toInt()
    val takeCount = readLine()!!.toInt()
    
    // TODO: 以下にコードを書いてください
    // drop()とtake()を使って中央部分を抽出する
    
    
    // 結果を出力する
    println(result)
}
quiz icon腕試し

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

基礎のすべてのレッスン

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