2D Diziler Üzerinde Yineleme
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 12 / 56.
2 boyutlu bir dizideki her hücreyi ziyaret etmek için iki yinelemeyi iç içe yerleştirirsiniz. Dış döngü satırlar arasında gezinir; iç döngü ise o satırın sütunları arasında gezinir.
En deyimsel Ruby deseni each metodunu iki kez kullanır:
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 (her biri kendi satırında)Eğer örneğin her bir hücreyi etiketlemek için satır ve sütun indekslerine de ihtiyacınız varsa, her iki seviyede de each_with_index kullanın:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endBu stil, dizinleri elle takip etmekten daha kısa ve güvenlidir; bir satırın sonuna geçme riski yoktur.
Görev
Kolaygrid adlı 2D dizi verilmiştir (3 satır × 3 sütun tam sayı).
Her bir satır için, değeri o satırın ortalamasından kesinlikle büyük olan her hücreyi bulun. Bu tür her bir hücreyi şu formatta kendi satırına yazdırın:
(r,c) = valueİç içe each_with_index kullanın. Ortalamayı dış döngü içinde hesaplayın, böylece her satırın eşiği bağımsız olur.
Varsayılan ızgara için, kendi satır ortalamasını geçen hücreler şunlardır:
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7Kopya kağıdı
2 boyutlu bir dizideki her hücre üzerinde gezinmek için iki each çağrısını iç içe yerleştirin:
grid.each do |row|
row.each do |cell|
puts cell
end
endSatır ve sütun dizinlerine de erişmek için her iki seviyede de each_with_index kullanın:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endKendin dene
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# YAPILACAK: iç içe each_with_index, satır ortalamasından büyük olan hücreleri yazdır
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