Wie man mit Arrays in Ruby arbeitet


Ein Array ist eine Datenstruktur, die eine Liste von Werten repräsentiert, die als Elemente bezeichnet werden. Arrays ermöglichen es Ihnen, mehrere Werte in einer einzigen Variablen zu speichern. In Ruby können Arrays beliebige Datentypen enthalten, einschließlich Zahlen, Zeichenketten und anderen Ruby-Objekten. Dies kann Ihren Code kompakter und organisierter gestalten, was ihn lesbarer und wartbarer macht. Alle Arrays sind Objekte mit eigenen Methoden, die Sie aufrufen können, um mit Datensätzen zu arbeiten.

In diesem Tutorial erstellen Sie Arrays, greifen auf die enthaltenen Werte zu, fügen Elemente einem Array hinzu, ändern sie und entfernen sie und iterieren durch die Elemente eines Arrays, um komplexere Probleme zu lösen.

Array erstellen

Sie beginnen damit, wie Sie Arrays genauer erstellen können. Als Beispiel hier eine Liste verschiedener Haiarten. Ohne ein Array würden Sie sie möglicherweise in einzelnen Variablen speichern:

sharks.rb
shark1 = "Hammerhead"
shark2 = "Great White"
shark3 = "Tiger"

Dieser Ansatz ist umständlich und kann schnell schwer zu pflegen werden, da er nicht sehr flexibel ist. Das Hinzufügen eines weiteren Hais bedeutet, dass Sie eine zusätzliche Variable hinzufügen und verfolgen müssten.

Wenn Sie ein Array verwenden, können Sie diese Daten vereinfachen. Um ein Array in einem Ruby-Programm zu erstellen, verwenden Sie eckige Klammern: ([]) und trennen die Werte, die Sie speichern möchten, mit Kommas.

sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]

Statt drei separaten Variablen zu erstellen, haben Sie jetzt eine Variable, die alle drei Haie enthält. In diesem Beispiel haben Sie eckige Klammern — [] — verwendet, um ein Array zu erstellen, und jedes Element mit einem Komma getrennt. Wenn Sie einen weiteren Hai hinzufügen müssten, würden Sie einfach einen weiteren Hai zum Array hinzufügen, anstatt eine neue Variable zu erstellen und zu verwalten.

Sie können ein gesamtes Array mit der print-Anweisung ausgeben, die den Inhalt des Arrays anzeigt:

print sharks
Output
["Hammerhead", "Great White", "Tiger"]

Wenn Sie ein Array erstellen möchten, in dem jedes Element ein einzelnes Wort ist, können Sie die Syntax %w{} verwenden, die ein Wort-Array erstellt:

days = %w{Monday Tuesday Wednesday Thursday Friday Saturday Sunday}

Dies entspricht dem Erstellen des Arrays mit eckigen Klammern:

days =  ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

Beachten Sie jedoch, dass die Methode %w{} es Ihnen ermöglicht, die Anführungszeichen und die Kommas zu überspringen.

Arrays werden oft verwendet, um Listen ähnlicher Datentypen zusammenzufassen, aber in Ruby können Arrays jeden Wert oder eine Mischung aus Werten enthalten. Dies schließt andere Arrays ein. Hier ist ein Beispiel für ein Array, das einen String, einen nil-Wert, eine ganze Zahl und ein Array von Strings enthält:

mixed_data.rb
record = [
    "Sammy",
    null,
    7,
    [
        "another",
        "array",
    ]
]

Jetzt werden Sie sehen, wie Sie auf Daten zugreifen können, die in Arrays gespeichert sind.

Zugriff auf Elemente in Arrays

Um auf ein bestimmtes Element oder Element eines Arrays zuzugreifen, verweisen Sie auf seinen Index oder seine Position im Array. In Ruby beginnen die Indizes bei null. Um das erste Element aus Ihrem sharks Array abzurufen, fügen Sie den Index des Elements an die Variable an, indem Sie eckige Klammern verwenden:

sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]

Das sharks Array hat drei Elemente. Hier ist eine Aufschlüsselung, wie jedes Element im sharks Array indiziert ist.

Hammerhead Great White Tiger
0 1 2

Das erste Element im Array ist Hammerhead, das bei 0 indiziert ist. Das letzte Element ist Tiger, das bei 2 indiziert ist. Das Zählen beginnt bei 0 in den Indizes, was gegen die natürliche Intuition, bei 1 zu beginnen, verstößt. Sie sollten dies im Hinterkopf behalten, bis es Ihnen natürlich vorkommt.

Hinweis: Es könnte Ihnen helfen, den Index als Offset zu betrachten, also die Anzahl der Positionen ab dem Anfang des Arrays. Das erste Element befindet sich am Anfang, daher ist der Offset oder Index 0. Das zweite Element ist eine Position vom ersten Eintrag im Array entfernt, daher ist sein Offset oder Index 1.

Sie können herausfinden, wie viele Elemente sich in einem Array befinden, mit der Methode length:

sharks.length
Output
3

Obwohl die Indizes von sharks bei 0 beginnen und bis 2 gehen, gibt die Eigenschaft length die Anzahl der Elemente im Array zurück, die 3 beträgt. Sie kümmert sich überhaupt nicht um die Indizes.

Wenn Sie die Indexnummer eines bestimmten Elements in einem Array herausfinden möchten, wie zum Beispiel Tiger, verwenden Sie die Methode index():

print sharks.index("Tiger")
Output
2

Dies gibt den Index des ersten Elements zurück, das diesen Text enthält. Wenn keine Indexnummer gefunden wird, wie z.B. für einen Wert, der nicht existiert, gibt die Konsole `nil` zurück:

print sharks.index("Whale")
Output
nil

Um das letzte Element eines Arrays in Ruby zu erhalten, verwenden Sie den Index `-1`:

print sharks[-1]
Output
"Tiger"

Ruby bietet auch die Methoden first und last, um das erste und das letzte Element ohne Verwendung von Indizes zu erhalten:

puts sharks.first
puts sharks.last
Output
"Hammerhead" "Tiger"

Der Versuch, auf einen nicht vorhandenen Index zuzugreifen, gibt `nil` zurück:

sharks[10]
Output
nil

Arrays können andere Arrays enthalten, die als verschachtelte Arrays bezeichnet werden. Dies ist eine Möglichkeit, zweidimensionale Datensätze in einem Programm zu modellieren. Hier ist ein Beispiel für ein verschachteltes Array:

nested_array = [
    [
        "salmon",
        "halibut",
    ],
    [
        "coral",
        "reef",
    ]
]

Um auf Elemente in einem verschachtelten Array zuzugreifen, fügen Sie eine weitere Indexnummer hinzu, um dem inneren Array zu entsprechen. Um beispielsweise den Wert coral aus diesem verschachtelten Array abzurufen, verwenden Sie die folgende Anweisung:

print nested_array[1][0];
Output
coral

In diesem Beispiel haben Sie auf das Array an Position 1 der Variable nested_array zugegriffen, das das Array ["coral", "reef"] zurückgab. Dann haben Sie auf die Elemente an Position 0 dieses Arrays zugegriffen, was "coral" war.

Jetzt werden Sie sehen, wie Sie Elemente zu einem Array hinzufügen.

Hinzufügen von Elementen zu Arrays

Sie haben drei Elemente in Ihrem sharks-Array, die von 0 bis 2 indiziert sind:

sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger"]

Es gibt einige Möglichkeiten, ein neues Element hinzuzufügen. Sie könnten einem Wert den nächsten Index zuweisen, der in diesem Fall 3 wäre:

sharks[3] = "Whale";

print sharks
Output
["Hammerhead", "Great White", "Tiger", "Whale"]

Diese Methode ist jedoch fehleranfällig. Wenn Sie ein Element hinzufügen und versehentlich einen Index überspringen, wird dadurch ein nil-Element im Array erstellt.

sharks[5] = "Sand";

print sharks;
Output
["Hammerhead", "Great White", "Tiger", "Whale", nil, "Sand"]

Wenn Sie versuchen, auf das zusätzliche Array-Element zuzugreifen, wird sein Wert zurückgegeben, der nil sein wird:

sharks[4]
Output
nil

Das Finden des nächsten verfügbaren Index in einem Array ist fehleranfällig und erfordert zusätzliche Zeit. Vermeiden Sie Fehler, indem Sie die push-Methode verwenden, die ein Element am Ende eines Arrays hinzufügt:

sharks.push("Thresher")
print sharks
Output
["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher"]

Sie können auch die Syntax << anstelle der push-Methode verwenden, um ein Element am Ende eines Arrays hinzuzufügen:

sharks << "Bullhead"
Output
["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]

Um ein Element am Anfang eines Arrays hinzuzufügen, verwenden Sie die unshift()-Methode:

sharks.unshift("Angel")
print sharks
Output
["Angel", "Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]

Jetzt, da Sie wissen, wie man Elemente hinzufügt, werden Sie sehen, wie man sie entfernt.

Entfernen von Elementen aus Arrays

Um ein bestimmtes Element aus einem Array zu entfernen, verwenden Sie die Methoden delete oder delete_at. Im Array sharks haben Sie zuvor ein nil-Array-Element erstellt. Jetzt werden Sie es loswerden.

Zuerst finden Sie seine Position im Array. Sie können dazu die Methode index verwenden:

print sharks.index(nil)
Output
4

Dann verwenden Sie delete_at, um das Element am Index 4 zu entfernen, und geben das Array aus:

sharks.delete_at(4)
print sharks
Output
["Angel", "Hammerhead", "Great White", "Tiger", "Whale", "Thresher", "Bullhead"]

Die Methode delete entfernt Elemente aus einem Array, die mit dem übergebenen Wert übereinstimmen. Verwenden Sie sie, um Whale aus dem Array zu entfernen:

sharks.delete("Whale")
print sharks;
Output
["Angel", "Hammerhead", "Great White", "Tiger", "Thresher", "Bullhead"]

Die Methode delete entfernt alle Vorkommen des übergebenen Werts, sodass bei Vorhandensein von Duplikaten im Array alle entfernt werden.

Die Methode pop entfernt das letzte Element aus einem Array:

sharks.pop
print sharks;
Output
["Angel", "Hammerhead", "Great White", "Tiger", "Thresher"]

Bullhead wurde als letztes Element des Arrays entfernt. Um das erste Element des Arrays zu entfernen, verwenden Sie die Methode shift:

sharks.shift
print sharks
Output
["Hammerhead", "Great White", "Tiger", "Thresher"]

Diesmal wurde Angel vom Anfang des Arrays entfernt.

Mit pop und shift können Sie Elemente am Anfang und am Ende von Arrays entfernen. Die Verwendung von pop ist immer bevorzugt, da die restlichen Elemente ihre ursprünglichen Indexnummern behalten.

Die Methoden delete_at, pop und shift verändern alle das ursprüngliche Array und geben das gelöschte Element zurück::

sharks.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
deleted_at_element = sharks.delete_at(1)
popped_element = sharks.pop

puts "Deleted_at element: #{deleted_at_element}"
puts "Popped element: #{popped_element}"

puts "Remaining array: #{sharks}"
Output
Deleted_at element: Great White Popped element: Whale Remaining array: ["Hammerhead", "Tiger"]

Sie kennen nun mehrere Möglichkeiten, Elemente aus einem Array zu entfernen. Als nächstes werden Sie sehen, wie Sie bereits vorhandene Elemente ändern können.

Ändern vorhandener Elemente in Arrays

Um ein Element im Array zu aktualisieren, weisen Sie ihm einen neuen Wert zu, indem Sie den Zuweisungsoperator verwenden, genauso wie bei einer normalen Variablen.

Gegeben ein neues Array von Haien, mit "Hammerhead" am Index 0, werden Sie "Hammerhead" mit "Angel" ersetzen:

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks[0] = "Angel"
print sharks;
Output
["Angel", "Great White", "Tiger", "Whale"]

Um sicherzustellen, dass Sie das richtige Element aktualisieren, könnten Sie die index-Methode verwenden, um das Element zuerst zu lokalisieren, genau wie Sie es getan haben, um das Element zu finden, das Sie löschen wollten.

Jetzt werden Sie sehen, wie Sie mit allen Elementen im Array arbeiten können.

Über Arrays iterieren

Ruby bietet viele Möglichkeiten, über ein Array zu iterieren, und die Methode, die Sie verwenden, hängt von der Art der Arbeit ab, die Sie ausführen möchten. Als nächstes werden Sie erkunden, wie Sie über ein Array iterieren und jedes seiner Elemente anzeigen können.

Ruby bietet die Syntax for..in:

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
for shark in sharks do
  puts shark
end

Für jedes Element im Array sharks weist Ruby dieses Element der lokalen Variable shark zu. Sie können dann den Wert des Elements mit puts ausgeben.

Sie werden jedoch nicht sehr oft for..in sehen. Ruby-Arrays sind Objekte und sie bieten die Methode each zum Arbeiten mit Elementen. Die each-Methode funktioniert ähnlich wie for..in, hat jedoch eine andere Syntax:

each.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each do |shark|
  puts shark
end

Das each-Methode verwendet eine Syntax, die Sie in der Ruby-Programmierung häufig sehen werden. Es nimmt einen Ruby-Block als Argument. Ein Block ist ein Stück Code, der später im Kontext der Methode ausgeführt wird. In diesem Fall ist der Code puts shark. Das shark-Schlüsselwort, eingeschlossen in den Pipe-Zeichen (|), ist die lokale Variable, die das Element im Array repräsentiert, auf das der Block zugreifen wird. Ruby weist das Element dieser Variable zu und führt den Code im Block aus. Die each-Methode wiederholt diesen Prozess für jedes Element im Array:

Output
Hammerhead Great White Tiger Whale

Wenn der Block nur aus einer einzigen Zeile besteht, sehen Sie oft, dass Ruby-Entwickler die Schlüsselwörter do und end durch geschweifte Klammern ersetzen und die gesamte Anweisung auf eine einzige Zeile verkürzen:

each.rb
...
sharks.each {|shark| puts shark }

Dies erzeugt die gleichen Ergebnisse, verwendet aber weniger Codezeilen.

Die each_with_index-Methode funktioniert auf ähnliche Weise, gibt Ihnen jedoch auch Zugriff auf den Index des Array-Elements. Dieses Programm verwendet each_with_index, um den Index und den Wert für jedes Element auszugeben:

each_with_index.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each_with_index do |shark, index|
  puts "The index is #{index}"
  puts "The value is #{shark}"
end

Für jedes Element im Array weist Ruby das Element der Variablen shark zu und weist den aktuellen Index der Variablen index zu. Sie können dann beide Variablen im Block referenzieren.

Output
The index is 0 The value is Hammerhead The index is 1 The value is Great White The index is 2 The value is Tiger The index is 3 The value is Whale

Sie werden oft über die Elemente in einem Array iterieren, wie zum Beispiel wenn Sie die Elemente einer Datenbank auf einer Website anzeigen müssen oder wenn Sie Zeilen aus einer Datei lesen und deren Inhalt verarbeiten.

Schlussfolgerung

Arrays sind ein äußerst vielseitiger und grundlegender Bestandteil der Programmierung in Ruby. In diesem Tutorial haben Sie Arrays erstellt und auf einzelne Elemente zugegriffen. Sie haben auch Elemente in einem Array hinzugefügt, entfernt und geändert. Schließlich haben Sie zwei Möglichkeiten erkundet, wie Sie über ein Array iterieren und dessen Inhalt anzeigen können, was als gemeinsame Methode zur Anzeige von Daten verwendet wird.

Erfahren Sie mehr über andere Datentypen in Ruby, indem Sie das Tutorial Verständnis der Datentypen in Ruby lesen.

Source:
https://www.digitalocean.com/community/tutorials/how-to-work-with-arrays-in-ruby