Menu
CoddyTech

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: Blue

Hã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 breakfast
challenge icon

Thử thách

Trung bình

Bạ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 n biểu thị số lượng học sinh
  • n dò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: Charlie

Hã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
    
}
quiz iconTự kiểm tra

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

Tự luyện tập: Playground Kotlin