Iterieren über 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 von Ganzzahlen).
Finde für jede Zeile jede Zelle, deren Wert strikt größer als der Durchschnitt dieser Zeile ist. Gib jede dieser Zellen in einer eigenen Zeile im folgenden Format aus:
(r,c) = valueVerwende verschachtelte each_with_index. Berechne den Durchschnitt innerhalb der äußeren Schleife, damit der Schwellenwert jeder Zeile unabhängig ist.
Für das Standard-Grid sind die Zellen, die den Durchschnitt ihrer Zeile übertreffen:
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7Spickzettel
Um über jede Zelle in einem 2D-Array zu iterieren, verschachteln Sie zwei each-Aufrufe:
grid.each do |row|
row.each do |cell|
puts cell
end
endUm auch auf Zeilen- und Spaltenindizes zuzugreifen, 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
endProbier 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
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-Klassifizierer32D-Arrays
2D-Array GrundlagenZugriff auf 2D-ElementeIterieren über 2D-ArraysGängige 2D-MusterZusammenfassung – Matrix-Operationen6Projekt - Bibliotheksverwaltung
ProjektübersichtBuch hinzufügen