Menu
CoddyTech

Duyệt qua mảng 2 chiều

Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 12 trên 56.

Để duyệt qua mọi ô trong mảng 2D, bạn lồng hai lần lặp. Vòng lặp bên ngoài duyệt qua các hàng, vòng lặp bên trong duyệt qua các cột của hàng đó.

Mẫu Ruby tự nhiên nhất dùng each hai lần:

grid = [
  [1, 2, 3],
  [4, 5, 6]
]

grid.each do |row|
  row.each do |cell|
    puts cell
  end
end
# 1, 2, 3, 4, 5, 6  (mỗi số trên một dòng riêng)

Nếu bạn cũng cần chỉ số hàng và cột, chẳng hạn để gắn nhãn cho từng ô, hãy dùng each_with_index ở cả hai cấp:

grid.each_with_index do |row, r|
  row.each_with_index do |cell, c|
    puts "(#{r},#{c}) = #{cell}"
  end
end

Cách viết này ngắn gọn và an toàn hơn so với tự theo dõi chỉ số, bạn sẽ không có nguy cơ vượt quá phần tử cuối cùng của một hàng.

challenge icon

Thử thách

Dễ

Cho sẵn mảng 2D grid (3 hàng × 3 cột gồm các số nguyên).

Với mỗi hàng, hãy tìm mọi ô có giá trị lớn hơn hẳn giá trị trung bình của hàng đó. In mỗi ô như vậy trên một dòng riêng theo định dạng:

(r,c) = value

Dùng các vòng lặp lồng nhau với each_with_index. Tính giá trị trung bình bên trong vòng lặp ngoài để ngưỡng của mỗi hàng độc lập với nhau.

Với mảng mặc định, các ô có giá trị lớn hơn giá trị trung bình của hàng là:

(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7

Tự làm thử

grid = [
  [1, 8, 3],
  [4, 5, 9],
  [6, 7, 2]
]

# TODO: dùng each_with_index lồng nhau, in ra các ô có giá trị lớn hơn giá trị trung bình của hàng
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 Logic và luồng xử lý

Tự luyện tập: Trình biên dịch Ruby online