Durchlaufen von 2D-Arrays
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 12 von 56.
Um jede Zelle in einem 2D-Array zu besuchen, schachteln Sie zwei Iterationen. Die äußere Schleife durchläuft die Zeilen; die innere Schleife durchläuft die Spalten dieser Zeile.
Das idiomatischste Ruby-Muster verwendet each zweimal:
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 (jeweils in einer eigenen Zeile)Wenn Sie auch die Zeilen- und Spaltenindizes benötigen, zum Beispiel um jede Zelle zu beschriften, verwenden Sie each_with_index auf beiden Ebenen:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endDieser Stil ist kürzer und sicherer, als Indizes manuell zu verfolgen; es besteht kein Risiko, über das Ende einer Zeile hinauszugehen.
Aufgabe
EinfachDas 2D-Array grid ist gegeben (3 Zeilen × 3 Spalten mit Ganzzahlen).
Finde für jede Zeile jede Zelle, deren Wert streng größer als der Durchschnitt dieser Zeile ist. Gib jede solche Zelle in einer eigenen Zeile im folgenden Format aus:
(r,c) = valueVerwende verschachtelte each_with_index-Schleifen. Berechne den Durchschnitt innerhalb der äußeren Schleife, damit der Schwellenwert für jede Zeile unabhängig ist.
Für das Standard-Array sind die Zellen, die den Durchschnitt ihrer Zeile übertreffen:
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7Probier es selbst
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# TODO: verschachteltes each_with_index, Zellen > als der Durchschnitt der Zeile ausgeben
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – Notenklassifizierer32D-Arrays
Grundlagen von 2D-ArraysZugriff auf 2D-ElementeDurchlaufen von 2D-ArraysGängige 2D-MusterRückblick – Matrixoperationen6Projekt – Bibliotheksverwaltung
ProjektübersichtBuch hinzufügenÜbe selbstständig: Online-Ruby-Compiler