07. Arrays und Iteratoren

Lassen Sie uns ein Programm schreiben, das uns so viele Wörter eingeben lässt, wie wir wollen (ein Wort pro Zeile, bis wir einfach die Eingabetaste in einer leeren Zeile drücken), und uns dann die Wörter in alphabetischer Reihenfolge wiederholt? Versuchen Sie, dieses Programm zu schreiben...

...

Haben Sie es geschafft? Sie hatten wahrscheinlich einige Probleme. Wie speichern Sie all diese Wörter? Sie wissen nicht, wie viele es sein werden. Sie können nicht einfach einen Haufen Variablen erstellen (wort1, wort2, usw.), weil der Benutzer mehr Wörter eingeben könnte, als Sie erwartet haben.

Wir brauchen eine Möglichkeit, eine Liste von Dingen zu speichern, ohne zu wissen, wie viele Dinge es gibt. Wir brauchen Arrays.

Ein Array ist einfach eine Liste in Ihrem Computer. Jeder Steckplatz in der Liste verhält sich wie eine Variable: Sie können sehen, auf welches Objekt ein bestimmter Steckplatz zeigt, und Sie können ihn auf ein anderes Objekt zeigen lassen. Lassen Sie uns ein Array erstellen:

[]
[5]
['Hallo', 'Auf Wiedersehen']

geschmack = 'Vanille'
[89.9, geschmack, [true, false]]

Zuerst haben wir ein leeres Array, dann ein Array mit einer einzigen Zahl, dann eines mit zwei Strings. Als Nächstes haben wir eine einfache Variablenzuweisung; dann ein Array mit drei Objekten: einem Float, der Variable geschmack und einem anderen Array.

Um uns zu helfen, Dinge in Arrays zu finden, erhält jeder Steckplatz eine Indexnummer. Programmierer (und die meisten Programmiersprachen, einschließlich Ruby) beginnen bei Null zu zählen, also ist der erste Steckplatz im Array der Steckplatz Null.

namen = ['Ada', 'Belle', 'Chris']

puts namen
puts namen[0]
puts namen[1]
puts namen[2]
puts namen[3]  # Das ist außerhalb des Bereichs.
Ada
Belle
Chris
Ada
Belle
Chris
nil

Wir sehen, dass puts namen jeden Namen im namen-Array ausgibt. Dann verwenden wir namen[0], um zu sehen, was im "Steckplatz Null" ist, namen[1] für "Steckplatz Eins" und so weiter. Als wir namen[3] versuchten, gab uns Ruby nil. nil ist Rubys Art, "nichts" zu sagen. Wenn Sie versuchen, auf einen Steckplatz zuzugreifen, der nicht existiert, erhalten Sie nil.

Die Methode each

each (jeder) erlaubt es uns, etwas für jedes Objekt zu tun, auf das das Array zeigt. Wenn wir etwas Nettes über jede Sprache in einem Array sagen wollen, würden wir das so machen:

sprachen = ['English', 'Norwegian', 'Ruby']

sprachen.each do |lang|
  puts 'Ich mag ' + lang + '!'
  puts 'Du nicht?'
end

puts 'Und lassen Sie uns etwas für C++ hören!'
puts '...'
Ich mag English!
Du nicht?
Ich mag Norwegian!
Du nicht?
Ich mag Ruby!
Du nicht?
Und lassen Sie uns etwas für C++ hören!
...

Was ist hier passiert? sprachen.each ist eine Methode, die wie eine Schleife wirkt. Der Code zwischen do und end wird für jedes Element im Array ausgeführt. Der Teil |lang| ist, wie wir dem aktuellen Objekt einen Namen geben (das Objekt, auf das each in diesem Moment zeigt). Das erste Mal zeigt lang auf 'English', das zweite Mal auf 'Norwegian' und so weiter.

Dies wird ein Iterator genannt. Iteratoren sind wie Schleifen, aber sie sind Methoden, die auf Listen von Dingen wirken.

Mehr Array-Methoden

Wir haben [], each und length gelernt (was bei Arrays genauso funktioniert wie bei Strings). Wir haben auch join, push, pop und sort.

join (verbinden) nimmt ein Array von Strings und verbindet sie zu einem einzigen String:

lebensmittel = ['Artischocke', 'Brioche', 'Karamell']

puts lebensmittel
puts
puts lebensmittel.to_s
puts
puts lebensmittel.join(', ')
puts
puts lebensmittel.join('  :)  ') + '  8)'
Artischocke
Brioche
Karamell

["Artischocke", "Brioche", "Karamell"]

Artischocke, Brioche, Karamell

Artischocke  :)  Brioche  :)  Karamell  8)

push (drücken) und pop (knallen/entfernen) sind Gegenteile. push fügt ein Objekt am Ende des Arrays hinzu, und pop entfernt das letzte Objekt aus dem Array (und sagt Ihnen, welches Objekt es war).

favoriten = []
favoriten.push 'Regentropfen auf Rosen'
favoriten.push 'Schnurrhaare von Kätzchen'

puts favoriten[0]
puts favoriten.last
puts favoriten.length

puts favoriten.pop
puts favoriten
puts favoriten.length
Regentropfen auf Rosen
Schnurrhaare von Kätzchen
2
Schnurrhaare von Kätzchen
Regentropfen auf Rosen
1

Ein paar Dinge zum Ausprobieren

  • Schreiben Sie das Programm, um das wir zu Beginn dieses Kapitels gebeten haben. Hinweis: Es gibt eine schöne Methode für Arrays namens sort (sortieren). Verwenden Sie sie!
  • Versuchen Sie, das obige Programm zu schreiben, ohne die sort-Methode zu verwenden. Ein großer Teil des Programmierens besteht darin, Sortierprobleme zu lösen.
  • Schreiben Sie Ihr Inhaltsverzeichnis-Programm (aus dem Kapitel über Methoden) neu. Beginnen Sie das Programm mit einem Array, das alle Informationen für Ihr Inhaltsverzeichnis enthält (Kapitelnamen, Seitenzahlen usw.). Drucken Sie dann alles in einer schön formatierten Schleife aus.

Jetzt, da wir Arrays und Iteratoren gelernt haben, sind wir bereit, unsere eigenen Methoden zu schreiben!