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, 9Chuyể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.
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:
Anti-diagonal sum: <n>, tổng các ô màr + c == matrix.length - 1Column 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ùnginspectSymmetric: truehoặcfalse: 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: falseTự 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
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ý
1Tìm hiểu sâu về chuỗi
Tổng quan về phương thức chuỗiNội suy chuỗiDuyệt qua chuỗiTách và nối chuỗiÔn tập: Đan chuỗi4Khối lệnh, Proc và lambda
Khối lệnh là gì?do..end và dấu ngoặc nhọnTừ khóa yieldTham số của khối lệnhProc và lambdaÔn tập: bộ lặp tùy chỉnh7Hash, phần 2
Hash.new với giá trị mặc địnhLặp qua HashHash lồng nhauGộp và chuyển đổiÔn tập: Bộ đếm tần suất10Dự án: Hồ sơ học sinh
Tổng quan dự ánThêm học sinh2Phạm vi
Phạm vi là gì?Các phương thức của phạm viPhạm vi trong case / whenÔn tập: luyện tập với phạm vi5Sức mạnh của Enumerable
select và rejectNối chuỗi mapreduce / injectcount, all?, any?, none?group_by và partitionsort_by, min_by, max_byÔn tập: quy trình dữ liệu3Mảng 2 chiều
Kiến thức cơ bản về mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuDuyệt qua mảng 2 chiềuCác mẫu phổ biến với mảng 2 chiềuÔn tập: thao tác với ma trận6Dự án: Trình quản lý thư viện
Tổng quan dự ánThêm sáchTự luyện tập: Trình biên dịch Ruby online