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}"
endKết quả là:
0: apple
1: banana
2: cherryLư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}"
endBằ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.
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: dateNếu đầu vào là red,green,blue, đầu ra sẽ là:
Item 1: red
Item 2: green
Item 3: blueNế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: fridayNếu đầu vào là solo, đầu ra sẽ là:
Item 1: soloTự 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"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 2
Toán tử logic phần 1Toán tử logic phần 2Ôn tập: logic đơn giảnToán tử logic phần 3Toán tử logic phần 42Biến và kiểu dữ liệu
Số và biếnKiểu dữ liệu chuỗiKiểu dữ liệu BooleanKiểu dữ liệu SymbolKiểm tra kiểu dữ liệuQuy ước đặt tênÔn tập: tạo biến8Vòng lặp
Vòng lặp for với khoảng giá trịVòng lặp whileThoátTiếp tụcÔn tập: giai thừaVòng lặp timesVòng lặp untilVòng lặp lồng nhauÔn tập: đầu vào động3Toán tử phần 1
Toán tử số họcToán tử moduloPhép tính số học rút gọnÔn tập: Toán cơ bảnToán tử so sánh6Nhập xuất cơ bản
In ra bằng putsIn ra bằng print và pIn ra bằng biếnNhập dữ liệu bằng getsPhương thức chompChuyển đổi kiểu dữ liệuÔn tập: Tính tuổiÔn tập: Đúng hay sai9Phương thức
Định nghĩa phương thứcTham số phương thứcGiá trị trả vềÔn tập: phương thức SigmaÔn tập: phương thức xác thựcGiá trị tham số mặc định15Theo dõi chi tiêu hằng ngày
Tổng quan dự ánThoát chương trìnhTự luyện tập: Trình biên dịch Ruby online