Arrays sind eine häufig verwendete Datenstruktur. Dafür gibt es eine ganze Reihe von Methoden, mit denen du Arrays bearbeiten kannst. Dazu gehören Sortieren, Umkehren, Einfügen und vieles mehr.
Einige dieser Methoden sind destruktiv, das heißt, sie verändern das ursprüngliche Array. Andere sind nicht destruktiv, geben also ein neues Array zurück und lassen das ursprüngliche Array unverändert.
Hier sind einige der gebräuchlichsten Methoden, die du beim Umgang mit Arrays verwenden kannst:
Wenn du ein Element in ein Array einfügen möchtest, kannst du die Methode insert verwenden. Sie nimmt einen Index und ein Element als Argumente entgegen.
Das Element wird an der angegebenen Position eingefügt, und der Rest des Arrays wird nach rechts verschoben.
Wenn der Index außerhalb des gültigen Bereichs liegt, wird ein IndexError ausgelöst.
numbers = [1, 2, 3]
numbers.insert(1, 4)
numbers # => [1, 4, 2, 3]
numbers.insert(5, 5) # => Error: Index out of bounds (IndexError)
Wenn du ein bestimmtes Element aus einem Array löschen möchtest, kannst du die Methode delete verwenden, die ein Element als Argument entgegennimmt.
Die Methode gibt das Element zurück, das entfernt wurde.
Wenn das Element nicht im Array vorhanden ist, wird nil zurückgegeben.
numbers = [1, 2, 3]
numbers.delete(2) # => 2
numbers # => [1, 3]
Wenn du das erste oder das letzte Element eines Arrays erhalten möchtest, kannst du die Methoden first und last verwenden.
Diese Methoden nehmen ein optionales Argument entgegen, das angibt, wie viele Elemente zurückgegeben werden sollen.
Das kann die Lesbarkeit verbessern, verglichen mit der Verwendung des Index 0 oder -1 oder eines Bereichs.
Wenn das Array leer ist, wird ein Enumerable::EmptyError ausgelöst.
numbers = [1, 2, 3]
numbers.first # => 1
numbers.last # => 3
numbers.first(2) # => [1, 2]
numbers.last(2) # => [2, 3]
empty_array = [] of Int32
empty_array.last # => Error: Empty enumerable (Enumerable::EmptyError)
Wenn du ein Array umkehren möchtest, kannst du die Methode reverse verwenden, die ein neues Array mit den Elementen in umgekehrter Reihenfolge zurückgibt.
Wichtig zu wissen: reverse gibt ein neues Array zurück und verändert das ursprüngliche Array nicht.
Wenn du das ursprüngliche Array verändern möchtest, hänge ein ! an das Ende des Methodennamens an.
numbers = [1, 2, 3]
numbers.reverse # => [3, 2, 1]
numbers # => [1, 2, 3]
numbers.reverse! # => [3, 2, 1]
numbers # => [3, 2, 1]
+)Die Methode zum Anhängen (<<) ist nützlich, wenn du Objekte zu einem Array hinzufügen möchtest.
Wenn du jedoch zwei Arrays kombinieren willst, kannst du den Operator + verwenden, der ein neues Array mit den Elementen beider Arrays zurückgibt.
[1, 2] + [3, 4] # => [1, 2, 3, 4]
Wenn du ein Array an ein anderes Array anhängst, wird das Array als einzelnes Element hinzugefügt.
[1, 2] << [3, 4] # => [1, 2, [3, 4]]
Wenn du prüfen möchtest, ob ein Array leer ist, kannst du die Methode empty? verwenden, die true zurückgibt, wenn das Array leer ist, und andernfalls false.
Das verbessert die Lesbarkeit, verglichen damit, die Länge des Arrays mit 0 zu vergleichen.
[].empty? # => true
[1, 2, 3].empty? # => false
Wenn du den Index eines Elements in einem Array ermitteln möchtest, kannst du die Methode index verwenden, die ein Element als Argument entgegennimmt.
Wenn das Element nicht im Array vorhanden ist, wird nil zurückgegeben.
numbers = [1, 2, 3]
numbers.index(2) # => 1
Wenn du wissen möchtest, wie viele Elemente ein Array enthält, kannst du die Methode size verwenden.
numbers = [1, 2, 3]
numbers.size # => 3
Wenn du zählen möchtest, wie oft ein Element in einem Array vorkommt, kannst du die Methode count verwenden.
fruits = ["apple", "banana", "apple"]
fruits.count("apple") # => 2
fruits.count("banana") # => 1
fruits.count("watermelon") # => 0
Wenn du ein Array sortieren möchtest, kannst du die Methode sort verwenden, die ein neues Array mit den sortierten Elementen zurückgibt.
Wie bei reverse gibt diese Methode ein neues Array zurück und verändert das ursprüngliche Array nicht.
numbers = [3, 2, 1]
numbers.sort # => [1, 2, 3]
numbers # => [3, 2, 1]
numbers.sort! # => [1, 2, 3]
numbers # => [1, 2, 3]
Chaitana besitzt einen sehr beliebten Freizeitpark. Sie hat nur eine einzige Attraktion, und zwar im Zentrum einer wunderschön angelegten Parklandschaft: Die größte Achterbahn der Welt(TM). Obwohl es nur diese eine Attraktion gibt, reisen Menschen aus aller Welt an und stehen stundenlang an, um einmal mit Chaitanas Hypercoaster zu fahren.
Für diese Attraktion gibt es zwei Warteschlangen, die jeweils als array dargestellt werden:
Du sollst etwas Code schreiben, damit sich die Gäste im Park besser verwalten lassen. Du musst die folgenden Funktionen so schnell wie möglich implementieren, bevor die Gäste (und deine Chefin, Chaitana!) schlechte Laune bekommen.
Definiere die Methode ColossalCoaster.add_to_queue, die 4 Argumente <express_queue>, <normal_queue>, <ticket_type>, <person_name> entgegennimmt und die passende Warteschlange zurückgibt, ergänzt um den Namen der Person.
<ticket_type> ist ein Int32, wobei 1 == express_queue und 0 == normal_queue gilt.<person_name> ist der Name (als String) der Person, die zur jeweiligen Warteschlange hinzugefügt werden soll.express_queue = ["Tony", "Bruce"]
normal_queue = ["RobotGuy", "WW"]
ColossalCoaster.add_to_queue(express_queue, normal_queue, 1, "RichieRich")
# => ["Tony", "Bruce", "RichieRich"]
Eine Person kommt zu spät in den Park, möchte sich aber der Warteschlange anschließen, in der ihre Freunde warten. Aber sie hat keine Ahnung, wo ihre Freunde stehen, und es gibt keinen Handyempfang, um sie anzurufen.
Definiere die Methode ColossalCoaster.find_my_friend, die 2 Argumente queue und friend_name entgegennimmt und die Position des Namens der Person in der Warteschlange zurückgibt.
<queue> ist ein array von Personen, die in der Warteschlange stehen.<friend_name> ist der Name des Freundes, dessen Index (Platz in der Warteschlange) du finden musst.ColossalCoaster.find_my_friend(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve")
# => 1
Nachdem ihre Freunde gefunden wurden (in Aufgabe #2 oben), möchte die zu spät Gekommene sich ihnen an ihrem Platz in der Warteschlange anschließen.
Definiere die Methode ColossalCoaster.add_with_friends, die 3 Argumente queue, friend_name und person_name entgegennimmt.
<queue> ist ein array von Personen, die in der Warteschlange stehen.<friend_name> ist der Name des Freundes, an dessen Position die Person eingefügt werden soll.<person_name> ist der Name der Person, die an dieser Indexposition eingefügt werden soll.Gib die Warteschlange zurück, ergänzt um den Namen der zu spät Gekommenen.
ColossalCoaster.add_with_friends(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve", "Bucky")
# => ["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Du hast gerade aus der Warteschlange gehört, dass es dort eine richtig gemeine Person gibt, die schubst, schreit und Ärger macht. Du musst diesen Störenfried wegen schlechten Benehmens rauswerfen!
Definiere die Methode ColossalCoaster.remove_from_queue, die 2 Argumente queue und person_name entgegennimmt.
<queue> ist ein array von Personen, die in der Warteschlange stehen.<person_name> ist der Name der Person, die rausgeworfen werden muss.Gib die Warteschlange ohne den Namen der gemeinen Person zurück.
ColossalCoaster.remove_from_queue(["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], "Eltran")
# => ["Natasha", "Steve", "Wanda", "Rocket"]
Zu Verwaltungszwecken brauchst du alle Namen einer gegebenen Warteschlange in alphabetischer Reihenfolge.
Definiere die Methode ColossalCoaster.sorted_queue, die 1 Argument entgegennimmt, queue (das array der Personen, die in der Warteschlange stehen).
Die Methode soll eine sortierte Kopie des array zurückgeben.
ColossalCoaster.sorted_queue(["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
# => ['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Melde dich bei Exercism an, um Crystal mit 26 Konzepte142 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.