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)) // []チャレンジ
中級整数のリストと、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)
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド