Gängige 2D-Muster
Teil des Abschnitts Logik und Ablauf 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 und Ablauf
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