Gängige 2D-Muster
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 13 von 56.
Einige Operationen mit 2D-Arrays treten so häufig auf, dass es sich lohnt, sie beim Namen zu kennen.
Jede Zelle summieren: Wandle das Raster in ein 1D-Array um und rufe sum auf:
grid = [[1, 2], [3, 4]]
puts grid.flatten.sum # 10Hauptdiagonale: die Zellen, bei denen der Zeilenindex dem Spaltenindex entspricht (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, 9Transponieren: Ruby verfügt über diese Funktion. Zeilen werden zu Spalten und umgekehrt:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]Wenn du diese dem Namen nach kennst, ersparst du dir, dieselben verschachtelten Schleifen neu zu schreiben.
Aufgabe
EinfachDie quadratische matrix ist gegeben (n × n). Gib drei Zeilen aus, die alle aus den Mustern in der Theorie abgeleitet sind:
Anti-diagonal sum: <n>, die Summe der Zellen, für dier + c == matrix.length - 1giltColumn sums: [...], die Summe jeder Spalte. Hinweis: Transponiere zuerst, bilde dann für jede Zeile die Summe und verwende anschließendinspectSymmetric: trueoderfalse: Ist die Matrix gleich ihrer eigenen Transponierten?
Für die Standardmatrix lautet die Ausgabe:
Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: falseProbier es selbst
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# TODO: anti-diagonal sum, column sums via transpose, symmetric check
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