Zugriff auf 2D-Elemente
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 11 von 56.
Um eine einzelne Zelle in einem 2D-Array zu lesen oder zu aktualisieren, verketten Sie zwei Index-Abfragen: Die erste wählt die Zeile aus, die zweite die Spalte.
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
puts matrix[0][0] # 10 (oben links)
puts matrix[1][2] # 60 (Zeile 1, Spalte 2)
puts matrix[2][0] # 70 (unten links)Das Aktualisieren einer Zelle verwendet dieselbe Syntax auf der linken Seite:
matrix[0][1] = 99
puts matrix[0].inspect # [10, 99, 30]Zwei nützliche Abfragen zur Form:
puts matrix.length # 3 (Anzahl der Zeilen)
puts matrix[0].length # 3 (Spalten in Zeile 0)Indizes beginnen bei 0 und gehen bis zu length - 1. Das Überschreiten des Endes gibt nil zurück, anstatt einen Fehler auszulösen.
Aufgabe
AnfängerDas 2D-Array matrix ist vorgegeben. Lies drei Ganzzahlen (drei Zeilen) ein: r1, c1, dann v. Dann:
- Gib den Wert an der Stelle
matrix[r1][c1]aus - Setze
matrix[r1][c1] = v - Gib das gesamte aktualisierte
matrixmitinspectaus
Für die Eingabe 1 / 2 / 99 lautet die Ausgabe:
60
[[10, 20, 30], [40, 50, 99], [70, 80, 90]]Spickzettel
Greifen Sie auf Zellen in einem 2D-Array mit verketteten Indizes [row][col] zu und aktualisieren Sie diese:
matrix = [
[10, 20, 30],
[40, 50, 60]
]
puts matrix[1][2] # 60
matrix[1][2] = 99 # Zelle aktualisieren
puts matrix.inspect # [[10, 20, 30], [40, 50, 99]]Form-Abfragen:
matrix.length # Anzahl der Zeilen
matrix[0].length # Anzahl der Spalten in Zeile 0Indizes beginnen bei 0; der Zugriff außerhalb der Grenzen gibt nil zurück.
Probier es selbst
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
r1 = gets.to_i
c1 = gets.to_i
v = gets.to_i
# TODO: matrix[r1][c1] ausgeben, v zuweisen, dann die gesamte matrix 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