Menu
CoddyTech

each với chỉ số

Thuộc phần Kiến thức nền tảng trong hành trình Ruby của Coddy. Bài học 66 trên 88.

Đôi khi, bạn cần biết không chỉ phần tử mình đang xử lý mà còn cả vị trí của nó trong mảng. Phương thức each_with_index của Ruby cung cấp cho bạn cả phần tử lẫn chỉ số của nó trong một lần lặp.

Cách hoạt động như sau:

fruits = ["apple", "banana", "cherry"]

fruits.each_with_index do |fruit, index|
  puts "#{index}: #{fruit}"
end

Kết quả là:

0: apple
1: banana
2: cherry

Lưu ý rằng khối lệnh (block) hiện nhận hai biến (variable) nằm giữa hai dấu gạch đứng: phần tử (element) đứng trước, tiếp theo là chỉ số (index). Chỉ số bắt đầu từ 0, giống như khi truy cập trực tiếp các phần tử trong mảng (array).

Điều này đặc biệt hữu ích khi bạn cần hiển thị danh sách có đánh số hoặc theo dõi vị trí:

tasks = ["Buy groceries", "Clean room", "Call mom"]

tasks.each_with_index do |task, i|
  puts "Task #{i + 1}: #{task}"
end

Bằng cách cộng 1 vào chỉ số, ta tạo danh sách được đánh số theo cách thân thiện với người dùng, bắt đầu từ 1 thay vì 0. Phương thức each_with_index giúp bạn không cần tự theo dõi biến đếm, nhờ đó code gọn gàng hơn và ít lỗi hơn.

challenge icon

Thử thách

Dễ

Đọc một dòng đầu vào chứa các từ được phân tách bằng dấu phẩy (ví dụ: apple,banana,cherry,date).

Tách đầu vào thành một mảng (array) các chuỗi (string), sau đó dùng each_with_index để in từng phần tử thành danh sách đánh số bắt đầu từ 1 (không phải 0).

Mỗi dòng cần theo định dạng này: Item 1: apple

Ví dụ: nếu đầu vào là apple,banana,cherry,date, đầu ra sẽ là:

Item 1: apple
Item 2: banana
Item 3: cherry
Item 4: date

Nếu đầu vào là red,green,blue, đầu ra sẽ là:

Item 1: red
Item 2: green
Item 3: blue

Nếu đầu vào là monday,tuesday,wednesday,thursday,friday, đầu ra sẽ là:

Item 1: monday
Item 2: tuesday
Item 3: wednesday
Item 4: thursday
Item 5: friday

Nếu đầu vào là solo, đầu ra sẽ là:

Item 1: solo

Tự làm thử

# Đọc đầu vào (input) gồm các giá trị phân tách bằng dấu phẩy
input = gets.chomp

# Tách đầu vào thành một mảng (array)
items = input.split(",")

# TODO: Dùng each_with_index để in ra từng phần tử dưới dạng danh sách (list) có đánh số
# Nhớ rằng: chỉ số (index) bắt đầu từ 0, nhưng bạn cần hiển thị bắt đầu từ 1
# Định dạng: "Item 1: apple"
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: Trình biên dịch Ruby online