Ruby mit AtCoder lernen 13 So erstellen Sie ein zweidimensionales Array

Einführung

Teilnahme an wettbewerbsfähiger Programmierung als Teil des Lernens von Ruby und Algorithmen. Hier geben wir aus, was wir während des Lernens gelernt haben.

Diesmal darüber, wie man ein zweidimensionales Array erstellt. Im 3. Algorithmus Test 2. Frage Dynamic Scoring Es gibt eine Szene, in der ich ein zweidimensionales Array verwenden möchte. Ich hatte hier ein kleines Problem, daher werde ich es zur Überprüfung zusammenfassen.

Was du machen willst

Ich wollte so etwas wie das Folgende machen, also entschied ich mich, ein zweidimensionales Array zu erstellen.

Zum Beispiel Drei Teilnehmer (1,2,3) nehmen an einer Prüfung teil. Die Prüfung wird drei Fragen haben. Verwalten Sie, ob jeder Teilnehmer jede Frage beantworten konnte.

Das Bild sieht wie unten aus.

Bild


#① Erstellen Sie ein zweidimensionales Array wie dieses
[[0, 0, 0],[0, 0, 0],[0, 0, 0]]

#② Wenn Teilnehmer 1 die erste Frage richtig beantwortet, geben Sie 1 in das entsprechende Element ein.
[[1, 0, 0],[0, 0, 0],[0, 0, 0]] #1 im ersten Element des Arrays der ersten Elemente

#③ Wenn Teilnehmer 3 die zweite Frage richtig beantwortet, geben Sie 1 in das entsprechende Element ein.
[[1, 0, 0],[0, 0, 0],[0, 1, 0]] #1 im zweiten Element des dritten Elementarrays

① Was du zuerst getan hast (falsch)

ary = Array.new(3, Array.new(3, 0))
print ary
# => [[0, 0, 0],[0, 0, 0],[0, 0, 0]]

Was das Aussehen betrifft, habe ich gemacht, was ich machen möchte, Wenn ich versuche, die Antwort aufzuzeichnen

ary[0][0] = 1
print ary
# => [[1, 0, 0],[1, 0, 0],[1, 0, 0]]

Ich wollte nur Änderungen am ersten Elementarray vornehmen, aber es betraf alle Arrays.

② Verwenden Sie die Kartenmethode (richtige Antwort!)

ary = Array.new(3).map{Array.new(3,0)}
print ary
# => [[0, 0, 0],[0, 0, 0],[0, 0, 0]]

ary[0][0] = 1
print ary
# => [[1, 0, 0],[0, 0, 0],[0, 0, 0]]

Durch die Verflechtung der Kartenmethode konnte ich das Array sicher so erstellen, wie ich es mir vorgestellt hatte.

Was ist der Unterschied

Die zweidimensionalen Arrays von (1) und (2) oben sehen genau gleich aus, scheinen jedoch völlig unterschiedliche Eigenschaften zu haben. Ich werde darüber nachdenken, was anders ist.

Informationen zur neuen Methode ① der Array-Klasse

In der Referenz wird Folgendes geschrieben.

new(size = 0, val = nil) -> Array

Erzeugt ein Array mit Längengröße, initialisiert jedes Element mit val und gibt es zurück. Beachten Sie, dass val nicht Element für Element dupliziert wird. Alle Elemente beziehen sich auf den gleichen Objektwert.

Beispiel


ary = Array.new(3, "foo")
p ary                     #=> ["foo", "foo", "foo"]
ary[0].capitalize!
p ary                     #=> ["Foo", "Foo", "Foo"]

In diesem Beispiel wird gezeigt, dass das "foo" in jedem Element dasselbe Objekt ist. Wie in der Beschreibung angegeben, sind alle Elemente das gleiche Objekt val.

Wird dann das zweidimensionale Array in following dem folgenden Bild erstellt?

1.jpg

Selbst wenn die Elemente im Array in drei Teile unterteilt zu sein scheinen, beziehen sie sich am Ende nur auf dasselbe Objekt. Es scheint, dass sich unabhängig davon, welches Element Sie ändern, dasselbe Objekt ändert.

Array.new(3, Array.new(3, 0)).jpg

Ist es so ein Bild?

Informationen zur Kartenmethode ②

In der Referenz wird Folgendes geschrieben.

map -> Enumerator map {|item| ... } -> [object]

Gibt ein Array zurück, das alle Ergebnisse der Auswertung von Blöcken für jedes Element enthält. Wenn Sie den Block weglassen, führen Sie die oben beschriebene Iteration durch und Gibt ein Enumerator-Objekt zurück, das das resultierende Array zurückgibt.

Beispiel


#Alles dreifach
p [1, 2, 3].map {|n| n * 3 }  # => [3, 6, 9]

Die Map-Methode extrahiert wie jede Methode nacheinander Elemente aus dem Array-Objekt. Gibt das Ergebnis der Verarbeitung im Block {} als Array zurück.

Hat das in (2) erstellte zweidimensionale Array das folgende Bild?

2.jpg

Da für jedes Element ein Array separat generiert wird, existiert jedes Element als unabhängiges Objekt. Es scheint also, dass Sie Änderungen separat vornehmen können.

Schließlich

Bisher habe ich die Punkte zusammengefasst, auf die ich beim Erstellen eines zweidimensionalen Arrays gestoßen bin. Ich beabsichtige, es beim Lesen der Referenz usw. zusammenzufassen. Wenn Sie Fehler haben, wäre ich Ihnen dankbar, wenn Sie darauf hinweisen könnten.

Recommended Posts

Ruby mit AtCoder lernen 13 So erstellen Sie ein zweidimensionales Array
So erstellen Sie ein Java-Array
Ruby mit AtCoder lernen 11 So erhalten Sie häufig verwendete Standardeingaben
[Java] So drehen Sie ein zweidimensionales Array mit einer erweiterten for-Anweisung
[Ruby] Extrahieren eines zweidimensionalen Arrays
Ruby mit AtCoder lernen 12 So verwenden Sie die Standardausgabe richtig (p / put / print)
Ruby mit AtCoder 6 lernen [Contest 168 Daher]
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
So erstellen Sie einen JDBC-Treiber
So erstellen Sie einen Begrüßungsbildschirm
So erstellen Sie ein Jenkins-Plug-In
Wie erstelle ich ein Maven-Projekt?
Machen Sie ein Tippspiel mit Ruby
Versuchen Sie, die Idee eines zweidimensionalen Arrays mit einem eindimensionalen Array nachzuahmen
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
So erstellen Sie eine Java-Kalenderzusammenfassung
Ruby mit AtCoder 7 lernen [Contest 168 Triple Dots]
So fügen Sie einen neuen Hash / Array hinzu
Wie erstelle ich einen Discord Bot (Java)
Ruby zweidimensionales Array
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
Wenn Sie mit Ruby eine Zip-Datei erstellen möchten, ist dies Rubyzip.
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]
AtCoder Anfängerwettbewerb 169 A, B, C mit Rubin
Konvertieren Sie eine Zeichenfolge mit swift in ein zeichenweises Array
So erstellen Sie Pagenationen für das "Kaminari" -Array
So erstellen Sie eine leichte JRE für den Vertrieb
AtCoder ABC127 D Hash mit Ruby 2.7.1 zu lösen
[Ruby] So generieren Sie eine zufällige Alphabet-Zeichenfolge
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 3 ~ Übung ~ erstellt
So erstellen Sie eine Beurteilungsmethode, um nach einem beliebigen Zeichen im Array zu suchen
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
Ruby mit AtCoder 9 lernen [1. Algorithmus Praktischer Test 3.] Sortieren von Array-Elementen
Wie man ein schattiertes Glas macht
[Rubiy] Ich möchte mit der Split-Methode ein Array aus einer Zeichenfolge erstellen. Und umgekehrt.
So verwenden Sie ein Array für den TreeMap-Schlüssel
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
So löschen Sie ein mit Rails erstelltes new_record-Objekt
So organisieren Sie Informationen, um das Programmierlernen zu optimieren
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
So funktioniert JavaScript auf einer bestimmten Seite
So generieren Sie manuell ein JWT mit Knock in Rails
AtCoder Anfängerwettbewerb 170 A, B, C bis Rubin
So starten Sie einen anderen Befehl in einem Ruby-Programm
So geben Sie einen Standard aus einem Array mit for Each aus
[So fügen Sie ein Video mit Rails in haml ein]
So konvertieren Sie eine Datei in ein Byte-Array in Java
Abfragen von Arrays in jsonb mit Rails + postgres
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1
Wie man einen Cache erstellt, ohne zu viel nachzudenken
Wie erstelle ich einen MOD für Slay the Spire?
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
So ermitteln Sie den Gesamtwert, den Durchschnittswert usw. eines zweidimensionalen Arrays (mehrdimensionales Array) -java