Ein Array mit Index abbilden in Ruby

Nurudeen Ibrahim 18 April 2022
  1. Kombinieren Sie die Methoden map und each_with_index in Ruby
  2. Kombiniere map und with_index Methoden in Ruby
  3. Verwendung von map zusammen mit der Ruby Range
Ein Array mit Index abbilden in Ruby

Die Methode map ist in Ruby ziemlich praktisch, und sie ist praktisch, wenn Sie ein Array in ein anderes umwandeln müssen. Der folgende Code verwendet beispielsweise map, um ein Array aus Kleinbuchstaben in ein Array aus Großbuchstaben umzuwandeln.

Beispielcode:

small_letters = ['a', 'b', 'c', 'd']
capital_letters = small_letters.map { |l| l.capitalize }
puts capital_letters

Ausgabe:

["A", "B", "C", "D"]

Nehmen wir im obigen Beispiel an, dass wir den jeweiligen Index jedes Buchstabens im Array abbilden und abrufen möchten. Wie machen wir das? Nachfolgend sind verschiedene Möglichkeiten aufgeführt, um dies zu erreichen.

Kombinieren Sie die Methoden map und each_with_index in Ruby

each_with_index ist eine aufzählbare Ruby-Methode.

Es tut, was der Name sagt. Es durchläuft ein Array oder einen Hash und extrahiert jedes Element mit seinem jeweiligen Index. Der Aufruf von map für das Ergebnis von each_with_index gibt uns Zugriff auf die Indizes.

Hier ist die offizielle Dokumentation von each_with_index für weitere Erklärungen.

Beispielcode:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.each_with_index.map { |l, i| [i + 1, l.capitalize] }
puts numbered_capital_letters

Ausgabe:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

Kombiniere map und with_index Methoden in Ruby

with_index ist ähnlich wie each_with_index, aber mit leichten Unterschieden.

Anders als each_with_index kann with_index nicht direkt auf einem Array aufgerufen werden. Das Array muss zuerst explizit in einen Enumerator umgewandelt werden.

Da map automatisch die Konvertierung durchführt, ist die Ausführungsreihenfolge hier wichtig, rufen Sie .map auf, bevor Sie .with_index aufrufen.

Beispielcode:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.map.with_index { |l, i| [i + 1, l.capitalize] }
puts numbered_capital_letters

Ausgabe:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

Es ist auch erwähnenswert, dass with_index ein Argument akzeptiert, das der Offset des Index ist, wo der Index beginnen soll. Wir können dieses Argument verwenden, anstatt i + 1 innerhalb des {}-Blocks machen zu müssen.

Beispielcode:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.map.with_index(1) { |l, i| [i, l.capitalize] }
puts numbered_capital_letters

Ausgabe:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

Hier ist die offizielle Dokumentation von with_index für weitere Erklärungen.

Verwendung von map zusammen mit der Ruby Range

Die Ruby Range ist eine Reihe von Werten mit einem Anfang und einem Ende.

Beispielsweise ist 1..10 oder 1...11 ein Bereich, der eine Reihe von Werten von 1 bis 10 darstellt. Wir können dies zusammen mit der Methode map verwenden, um das gleiche Ergebnis wie in den obigen Beispielen zu erzielen.

Beispielcode:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = (0...small_letters.length).map { |i| [i + 1, small_letters[i].capitalize]  }
puts numbered_capital_letters

Ausgabe:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

Verwandter Artikel - Ruby Array

Verwandter Artikel - Ruby Map