Yaygın 2D Kalıplar
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 13 / 56.
Bazı 2D dizi işlemleri o kadar sık karşımıza çıkar ki, onları isimleriyle tanımaya değer.
Her hücreyi topla: ızgarayı tek boyutlu (1D) bir diziye düzleştirin ve sum metodunu çağırın:
grid = [[1, 2], [3, 4]]
puts grid.flatten.sum # 10Ana köşegen: satır dizininin sütun dizinine eşit olduğu hücreler (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, 9Transpoze: Ruby'de bu özellik yerleşik olarak bulunur. Satırlar sütun, sütunlar ise satır olur:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]Bunları isimleriyle bilmek, sizi aynı iç içe döngüleri tekrar yazmaktan kurtarır.
Görev
KolayKare matrix (n × n) verilmiştir. Teorideki desenlerden türetilen üç satır yazdırın:
Anti-diagonal sum: <n>,r + c == matrix.length - 1olan hücrelerin toplamıColumn sums: [...], her sütunun toplamı. İpucu: önce transpose işlemini yapın, ardından her satırı kendi toplamına eşleyin (map), sonrainspectkullanınSymmetric: trueveyafalse: matris kendi transpozuna eşit mi?
Varsayılan matris için çıktı şöyledir:
Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: falseKopya kağıdı
Ruby'de yaygın 2 boyutlu dizi işlemleri:
Tüm hücreleri topla — düzleştirin ve ardından toplayın:
grid.flatten.sumAna köşegen — satır dizininin sütun dizinine eşit olduğu hücreler (matrix[i][i]):
(0...matrix.length).each { |i| puts matrix[i][i] }
# i == 0: matrix[0][0], i == 1: matrix[1][1], ...Ters köşegen — r + c == matrix.length - 1 olan hücreler:
(0...matrix.length).each { |i| puts matrix[i][matrix.length - 1 - i] }Transpoz — satırlar sütun olur:
matrix.transpose
# [[1,4,7],[2,5,8],[3,6,9]]Sütun toplamları — önce transpozunu alın, ardından her satırı toplayın:
matrix.transpose.map(&:sum) # [col0_sum, col1_sum, ...]Simetriyi kontrol et — matrisi transpozuyla karşılaştırın:
matrix == matrix.transpose # true veya falseKendin dene
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# YAPILACAKLAR: ters köşegen toplamı, transpoz yoluyla sütun toplamları, simetri kontrolü
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı32D Diziler
2D Dizi Temelleri2D Elemanlara Erişim2D Diziler Üzerinde YinelemeYaygın 2D KalıplarÖzet - Matris İşlemleri6Proje - Kütüphane Yöneticisi
Projeye Genel BakışKitap Ekle