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.
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
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.
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.
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.
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?
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.
Ist es so ein Bild?
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?
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.
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