Menu
CoddyTech

Các mẫu phổ biến với 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 13 trên 56.

Một số thao tác với mảng 2D xuất hiện thường xuyên đến mức bạn nên nhận biết tên của chúng.

Tính tổng mọi ô: chuyển lưới thành mảng 1D rồi gọi sum:

grid = [[1, 2], [3, 4]]
puts grid.flatten.sum  # 10

Đường chéo chính: các ô có chỉ số hàng bằng chỉ số cột (matrix[i][i]):

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

(0...matrix.length).each do |i|
  puts matrix[i][i]
end
# 1, 5, 9

Chuyển vị: Ruby có sẵn tính năng này. Hàng trở thành cột và ngược lại:

matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

Biết tên của chúng giúp bạn không phải viết lại cùng một vòng lặp lồng nhau.

challenge icon

Thử thách

Dễ

Ma trận vuông matrix đã cho (n × n). In ra ba dòng, tất cả đều dựa trên các mẫu trong phần lý thuyết:

  1. Anti-diagonal sum: <n>, tổng các ô mà r + c == matrix.length - 1
  2. Column sums: [...], tổng của mỗi cột. Gợi ý: trước tiên chuyển vị, sau đó ánh xạ mỗi hàng thành tổng của hàng đó, rồi dùng inspect
  3. Symmetric: true hoặc false: ma trận có bằng ma trận chuyển vị của chính nó không?

Với ma trận mặc định, đầu ra là:

Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: false

Tự làm thử

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

# TODO: tính tổng đường chéo phụ, tổng các cột bằng cách chuyển vị, kiểm tra tính đối xứ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