Cắt danh sách bằng take và drop
Thuộc phần Kiến thức nền tảng trong hành trình Kotlin của Coddy. Bài học 80 trên 93.
Kotlin cung cấp hai phương thức đơn giản hơn để trích xuất một phần của danh sách khi bạn chỉ cần các phần tử ở đầu hoặc cuối: take() và drop().
Phương thức take() trả về một danh sách mới chứa n phần tử đầu tiên:
val numbers = listOf(10, 20, 30, 40, 50)
val firstThree = numbers.take(3)
println(firstThree) // [10, 20, 30]Phương thức drop() làm điều ngược lại. Nó bỏ qua n phần tử đầu tiên và trả về phần còn lại:
val numbers = listOf(10, 20, 30, 40, 50)
val afterTwo = numbers.drop(2)
println(afterTwo) // [30, 40, 50]Khác với subList(), các phương thức này trả về bản sao độc lập thay vì chế độ xem. Chúng cũng dễ đọc hơn khi bạn chỉ muốn lấy “một vài phần tử đầu tiên” hoặc “mọi phần tử trừ một vài phần tử đầu tiên”.
Bạn có thể kết hợp cả hai phương thức để trích xuất phần ở giữa:
val letters = listOf("A", "B", "C", "D", "E")
val middle = letters.drop(1).take(3)
println(middle) // [B, C, D]Nếu bạn yêu cầu nhiều phần tử hơn số phần tử hiện có, các phương thức này chỉ trả về những phần tử sẵn có mà không gây ra lỗi:
val short = listOf(1, 2)
println(short.take(10)) // [1, 2]
println(short.drop(10)) // []Thử thách
Trung bìnhBạn sẽ nhận được một danh sách số nguyên và hai số: số phần tử cần bỏ từ đầu danh sách và số phần tử cần lấy sau khi bỏ.
Dùng drop() và take() cùng nhau để trích xuất một phần ở giữa danh sách, sau đó in ra các phần tử đã trích xuất.
Định dạng đầu vào:
- Dòng đầu tiên: một số nguyên
nbiểu thị số phần tử ndòng tiếp theo: các số nguyên cần thêm vào danh sách- Dòng tiếp theo: số phần tử cần bỏ từ đầu danh sách
- Dòng cuối cùng: số phần tử cần lấy sau khi bỏ
Định dạng đầu ra:
In ra danh sách kết quả theo định dạng danh sách mặc định của Kotlin.
Ví dụ:
Nếu danh sách là [10, 20, 30, 40, 50, 60], số phần tử cần bỏ là 2 và số phần tử cần lấy là 3, đầu ra sẽ là:
[30, 40, 50]Tự làm thử
fun main() {
// Đọc số lượng phần tử
val n = readLine()!!.toInt()
// Đọc các phần tử của danh sách
val list = mutableListOf<Int>()
for (i in 1..n) {
list.add(readLine()!!.toInt())
}
// Đọc các giá trị cho drop và take
val dropCount = readLine()!!.toInt()
val takeCount = readLine()!!.toInt()
// TODO: Viết code của bạn bên dưới
// Dùng drop() và take() để lấy phần ở giữa
// In ra kết quả
println(result)
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức nền tảng
4Toán tử phần 1
Toán tử số họcToán tử moduloPhép gán kết hợpToán tử so sánhÔn tập: phép tính đơn giản7Nhập xuất cơ bản
Hàm PrintlnMẫu chuỗiĐầu vào ReadLineChuyển đổi kiểu dữ liệuÔn tập: Số năm đến khi nghỉ hưuÔn tập: Đúng hay sai10Hàm
Khai báo hàmTham số và đối sốGiá trị trả vềĐối số có tênGiá trị mặc địnhHàm chỉ gồm một biểu thứcÔn tập: hàm SigmaÔn tập: hàm kiểm tra hợp lệ5Toán tử, phần 2
Toán tử logic, phần 1Toán tử logic, phần 2Toán tử logic, phần 3Toán tử ba ngôi với biểu thức ifÔn tập: logic đơn giản14Danh sách nâng cao
Cắt danh sách bằng SubListCắt danh sách bằng take và dropToán tử trên dãyPhương thức ContainsÔn tập: tìm kiếm trên một trang3Tính có thể null
An toàn với null là gìKiểu có thể nullToán tử gọi an toànToán tử ElvisCơ bản về thử thách hàmKhẳng định không nullÔn tập: truy cập an toàn6Ra quyết định
Câu lệnh ifCâu lệnh if-elseIf dưới dạng biểu thứcBiểu thức whenWhen với khoảng giá trịÔn tập: máy tính đơn giản9Vòng lặp
Vòng lặp forVòng lặp whileVòng lặp do-whileBreakContinuePhạm vi trong vòng lặpVòng lặp lồng nhauÔn tập: giai thừaÔn tập: đầu vào động12Cơ bản về danh sách
List và MutableListTruy cập phần tửChỉnh sửa danh sáchPhương thức của ListPair và TripleÔn tập: danh sách sản phẩmÔn tập: danh sách đảo ngược15Theo dõi chi tiêu hằng ngày
Tổng quan dự ánThoát khỏi chương trìnhTự luyện tập: Playground Kotlin