Phương thức WithIndex
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 75 trên 93.
Khi lặp qua một danh sách (list), bạn thường cần biết không chỉ phần tử (element) mà còn cả vị trí của nó. Phương thức (method) withIndex() cho bạn cả hai cùng lúc.
Gọi withIndex() trên bất kỳ danh sách nào để lấy các cặp chỉ số và giá trị:
val colors = listOf("Red", "Green", "Blue")
for ((index, color) in colors.withIndex()) {
println("$index: $color")
}
// Đầu ra:
// 0: Red
// 1: Green
// 2: BlueHãy chú ý đến cú pháp bên trong dấu ngoặc đơn: (index, color). Đây được gọi là giải cấu trúc, giúp tách chỉ số và giá trị thành các biến riêng biệt. Bạn có thể đặt tên cho các biến này sao cho phù hợp với code của mình.
Cách này gọn hơn so với việc tự theo dõi chỉ số bằng một biến đếm. Cách này đặc biệt hữu ích khi bạn cần hiển thị danh sách được đánh số hoặc thực hiện các hành động khác nhau dựa trên vị trí:
val tasks = listOf("Wake up", "Exercise", "Eat breakfast")
for ((i, task) in tasks.withIndex()) {
println("Step ${i + 1}: $task")
}
// Đầu ra:
// Step 1: Wake up
// Step 2: Exercise
// Step 3: Eat breakfastThử thách
Trung bìnhBạn sẽ nhận một danh sách tên học sinh làm đầu vào. Trước tiên, hãy đọc số lượng học sinh, sau đó đọc từng tên.
Dùng withIndex() để in tên mỗi học sinh cùng với thứ hạng của bạn ấy (bắt đầu từ 1, không phải 0).
Định dạng đầu vào:
- Dòng đầu tiên: một số nguyên
nbiểu thị số lượng học sinh ndòng tiếp theo: tên học sinh (chuỗi)
Định dạng đầu ra:
In tên mỗi học sinh trên một dòng riêng theo định dạng:
Rank 1: Alice
Rank 2: Bob
Rank 3: CharlieHãy nhớ rằng withIndex() cho bạn các chỉ số bắt đầu từ 0, vì vậy bạn cần điều chỉnh để thứ hạng bắt đầu từ 1.
Tự làm thử
fun main() {
// Đọc số lượng học sinh
val n = readLine()!!.toInt()
// Đọc tên học sinh vào danh sách (list)
val students = mutableListOf<String>()
for (i in 1..n) {
students.add(readLine()!!)
}
// TODO: Viết code của bạn bên dưới
// Dùng withIndex() để duyệt qua students và in ra thứ hạng của từng học sinh
// Lưu ý: withIndex() cho chỉ số (index) bắt đầu từ 0, nhưng thứ hạng phải bắt đầu từ 1
}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ệ13Duyệt qua các dãy
Duyệt qua các phần tửPhương thức WithIndexDuyệt qua chuỗi P1Duyệt qua chuỗi P2Ôn tập: các chữ cái có chỉ số3Tí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