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: falseSpickzettel
Gängige Operationen für 2D-Arrays in Ruby:
Alle Zellen summieren — erst glätten (flatten), dann summieren:
grid.flatten.sumHauptdiagonale — Zellen, bei denen der Zeilenindex dem Spaltenindex entspricht (matrix[i][i]):
(0...matrix.length).each { |i| puts matrix[i][i] }
# i == 0: matrix[0][0], i == 1: matrix[1][1], ...Nebendiagonale (Anti-diagonal) — Zellen, bei denen r + c == matrix.length - 1 gilt:
(0...matrix.length).each { |i| puts matrix[i][matrix.length - 1 - i] }Transponieren — Zeilen werden zu Spalten:
matrix.transpose
# [[1,4,7],[2,5,8],[3,6,9]]Spaltensummen — erst transponieren, dann jede Zeile summieren:
matrix.transpose.map(&:sum) # [col0_sum, col1_sum, ...]Symmetrie prüfen — Matrix mit ihrer Transponierten vergleichen:
matrix == matrix.transpose # true or 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