Gängige 2D-Muster
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 13 von 56.
Einige 2D-Array-Operationen treten so häufig auf, dass es sich lohnt, sie namentlich zu kennen.
Jede Zelle summieren: Wandeln Sie das Gitter in ein 1D-Array um und rufen Sie 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 hat dies bereits integriert. Zeilen werden zu Spalten und umgekehrt:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]Diese beim Namen zu kennen, erspart Ihnen das erneute Schreiben derselben verschachtelten Schleifen.
Aufgabe
EinfachDie quadratische matrix ist gegeben (n × n). Geben Sie drei Zeilen aus, die alle von den Mustern in der Theorie abgeleitet sind:
Anti-diagonal sum: <n>, die Summe der Zellen, bei denenr + c == matrix.length - 1giltColumn sums: [...], die Summe jeder Spalte. Hinweis: Zuerst transponieren, dann jede Zeile auf ihre Summe mappen, danninspectSymmetric: trueoderfalse: Ist die Matrix gleich ihrer eigenen Transponierten?
Für die Standard-Matrix 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: Summe der Gegendiagonalen, Spaltensummen via Transponierung, Symmetrie-Prüfung
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