Ruby Arrays

Ruby-Arrays sind geordnete, integer-indizierte Sammlungen beliebiger Objekte. Jedes Element in einem Array ist einem Index zugeordnet und kann über diesen Index aufgerufen werden.

Die Array-Indizierung beginnt bei 0, wie in C oder Java. Ein negativer Index wird relativ zum Ende des Arrays gezählt. Das heißt, ein Index von -1 zeigt auf das letzte Element des Arrays, -2 zeigt auf das vorletzte Element, und so weiter.

Ruby-Arrays können Objekte wie String, Integer, Fixnum, Hash, Symbol und sogar andere Array-Objekte speichern.

Ruby-Arrays müssen keine Größe angeben. Wenn Elemente zu einem Array hinzugefügt werden, wachsen Ruby-Arrays automatisch.

Arrays erstellen

Es gibt mehrere Möglichkeiten, ein Array zu erstellen oder zu initialisieren. Eine Möglichkeit ist dienew-Klassenmethode:

names = Array.new

Sie können die Größe des Arrays festlegen, während Sie es erstellen:

names = Array.new(20)

Das Arraynameshat eine Größe oder Länge von 20 Elementen. Sie können die Methode size oder length verwenden, um die Größe des Arrays zurückzugeben:

Beispiel

#!/usr/bin/ruby names = Array.new(20) puts names.size #gibt 20 zurück puts names.length #gibt 20 zurück

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

20
20

Sie können jedem Element des Arrays Werte zuweisen, wie unten gezeigt:

Beispiel

#!/usr/bin/ruby names = Array.new(4, "mac") puts "#{names}"

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

["mac", "mac", "mac", "mac"]

Sie können auch einen Block mit new verwenden, der jedes Element mit dem Ergebnis der Berechnung des Blocks füllt:

Beispiel

#!/usr/bin/ruby nums = Array.new(10) { |e| e = e * 2 } puts "#{nums}"

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Es gibt auch eine andere Methode für Arrays, [], wie unten gezeigt:

nums = Array.[](1, 2, 3, 4,5)

Eine andere Form der Array-Erstellung ist wie folgt:

nums = Array[1, 2, 3, 4,5]

Im Ruby-Kernmodul kann es eine Array-Methode geben, die nur ein einziges Argument annimmt. Diese Methode verwendet einen Bereich als Argument, um ein numerisches Array zu erstellen:

Beispiel

#!/usr/bin/ruby digits = Array(0..9) puts "#{digits}"

Die Ausgabe des obigen Beispiels ist:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Integrierte Array-Methoden

Wir benötigen eine Instanz eines Array-Objekts, um Array-Methoden aufzurufen. Im Folgenden wird gezeigt, wie man eine Instanz eines Array-Objekts erstellt:

Array.[](...) [oder] Array[...] [oder] [...]

Dies gibt ein neues Array zurück, das mit den angegebenen Objekten gefüllt ist. Nun können wir mit dem erstellten Objekt jede verfügbare Methode aufrufen. Zum Beispiel:

Beispiel

#!/usr/bin/ruby digits = Array(0..9) num = digits.at(6) puts "#{num}"

Die Ausgabe des obigen Beispiels ist:

6

Die folgenden sind die öffentlichen Array-Methoden (vorausgesetzt,arrayist ein Array-Objekt):

Nein.Methode & Beschreibung
1array & other_array
Gibt ein neues Array zurück, das die gemeinsamen Elemente beider Arrays ohne Duplikate enthält.
2array * int [oder] array * str
Gibt ein neues Array zurück, das durch Verkettung von int Kopien von self erstellt wird. Mit einem String-Argument entspricht es self.join(str).
3array + other_array
Gibt ein neues Array zurück, das durch Verkettung zweier Arrays zu einem dritten Array entsteht.
4array - other_array
Gibt ein neues Array zurück, das eine Kopie des ursprünglichen Arrays ist, wobei in other_array vorkommende Elemente entfernt wurden.
5str <=> other_str
Vergleicht str mit other_str und gibt -1 (kleiner als), 0 (gleich) oder 1 (größer als) zurück. Der Vergleich beachtet die Groß-/Kleinschreibung.
6array | other_array
Gibt ein neues Array zurück, indem other_array zum Array hinzugefügt und Duplikate entfernt werden.
7array << obj
Hängt das gegebene Objekt an das Ende des Arrays an. Der Ausdruck gibt das Array selbst zurück, sodass mehrere Anhänge verkettet werden können.
8array <=> other_array
Gibt eine Ganzzahl (-1, 0 oder +1) zurück, wenn das Array kleiner als, gleich oder größer als other_array ist.
9array == other_array
Zwei Arrays sind gleich, wenn sie dieselbe Anzahl von Elementen enthalten und jedes Element gleich dem entsprechenden Element im anderen Array ist (gemäß Object.==).
10array[index] [oder] array[start, length] [oder]
array[range] [oder] array.slice(index) [oder]
array.slice(start, length) [oder] array.slice(range)

Gibt das Element am Indexindexzurück oder gibt das Teilarray ab startstartbis zur Längelength zurückElemente oder gibt das durchrangeangegebene Teilarray zurück. Negative Indizes zählen vom Ende des Arrays (-1 ist das letzte Element). Wenn indexindex(oder der Startindex) außerhalb des Bereichs liegt, wirdnil zurückgegeben。
11array[index] = obj [oder]
array[start, length] = obj oder an_array oder nil [oder]
array[range] = obj oder an_array oder nil

Setzt das Element am Indexindexoder ersetzt das Teilarray ab startstartbis zur LängelengthElemente, oder ersetzt dasrangebereichsangegebene Teilarray. Wenn der Index größer als die aktuelle Kapazität des Arrays ist, wächst das Array automatisch. Negative Indizes zählen vom Ende des Arrays. Wenn lengthlengthnull ist, werden Elemente eingefügt. Wenn rangenilwird in der zweiten oder dritten Form verwendet, dann werden ausselfElemente gelöscht.
12array.abbrev(pattern = nil)
istselfDie darin enthaltenen Zeichenfolgen berechnen eine explizite Abkürzungsmenge. Wenn ein Muster oder eine Zeichenfolge übergeben wird, werden nur Fälle berücksichtigt, in denen die Zeichenfolge mit dem Muster übereinstimmt oder mit der Zeichenfolge beginnt.
13array.assoc(obj)
Durchsucht ein Array, dessen Elemente ebenfalls Arrays sind, wobei obj.== verwendet wird, um obj mit dem ersten Element jedes enthaltenen Arrays zu vergleichen. Wenn eine Übereinstimmung gefunden wird, wird das erste enthaltene Array zurückgegeben; wenn keine Übereinstimmung gefunden wird, wirdnil zurückgegeben.。
14array.at(index)
Gibt das Element an index zurück. Ein negativer Index zählt vomselfEnde des Arrays. Gibt nil zurück, wenn der Index außerhalb des Bereichs liegt.
15array.clear
Entfernt alle Elemente aus dem Array.
16array.collect { |item| block } [oder]
array.map { |item| block }

istselfRuft den Block einmal für jedes Element inblockauf. Erstellt ein neues Array, das die vom Block zurückgegebenen Werte enthält.
17array.collect! { |item| block } [oder]
array.map! { |item| block }

istselfRuft den Block einmal für jedes Element inblockauf und ersetzt das Element durchblockden vom Block zurückgegebenen Wert.
18array.compact
Gibt eine Kopie vonselfzurück, bei der allenil-Elemente entfernt wurden.
19array.compact!
Entfernt allenil-Elemente aus dem Array. Wenn keine Änderung erfolgt, gibtnil zurück.。
20array.concat(other_array)
Hängt die Elemente von other_array anself an..
21array.delete(obj) [oder]
array.delete(obj) { block }

vonselfLöscht aus dem Array das Element, das gleichobjobj ist. Wenn kein gleiches Element gefunden wird, gibt esnil zurück.. Wenn kein gleiches Element gefunden wird und ein optionaler Codeblockangegeben ist, gibtblockdas Ergebnis des Blocks zurück.
22array.delete_at(index)
Löscht das Element am angegebenenindexindex und gibt dieses Element zurück. Wenn der Index außerhalb des gültigen Bereichs liegt, gibt esnil zurück.。
23array.delete_if { |item| block }
Wennblockwahr ist, löschtselfjedes Element des Arrays.
24array.each { |item| block }
istselfRuft den Block einmal für jedes Element inblockauf und übergibt das Element als Argument.
25array.each_index { |index| block }
Wie Array#each, übergibt aber denindexindex des Elements anstelle des Elements selbst.
26array.empty?
Gibt true zurück, wenn das Array selbst keine Elemente enthält.
27array.eql?(other)
Gibt true zurück, wennarrayundotherdasselbe Objekt ist oder wenn die beiden Arrays denselben Inhalt haben.
28array.fetch(index) [oder]
array.fetch(index, default) [oder]
array.fetch(index) { |index| block }

Attempts to return the element at positionindex. Ifindexis outside the array, the first form throws anIndexErrorexception, the second form returnsdefault, and the third form returns the result of callingblockthe block withindexthe index as an argument. Negativeindexindexes count from the end of the array.
29array.fill(obj) [or]
array.fill(obj, start [, length]) [or]
array.fill(obj, range) [or]
array.fill { |index| block } [or]
array.fill(start [, length] ) { |index| block } [or]
array.fill(range) { |index| block }

The first three forms setselfthe selected elements of self toobjobj. Anilstart of nil is equivalent to zero.nilThe length of nil is equivalent toself.lengththe length of self. The last three forms use the block's value to fillthearray.blockThe block is passed the absolute index of each element being filled.
30array.first [oder]
array.first(n)

Gibt das erste Element oder die erstennElemente zurück. Wenn das Array leer ist, gibt die erste Formnilzurück, und die zweite Form gibt ein leeres Array zurück.
31array.flatten
Gibt ein neues Array zurück, das ein eindimensionales abgeflachtes Array ist (rekursiv).
32array.flatten!
behältarrayFührt eine Abflachung durch. Wenn es keine Änderung gibt, wirdnilzurückgegeben. (Das Array enthält keine Unterarrays.)
33array.frozen?
Gibt true zurück, wennarrayeingefroren ist (oder während des Sortierens vorübergehend eingefroren).
34array.hash
Berechnet den Hash-Code für das Array. Zwei Arrays mit demselben Inhalt haben denselben Hash-Code.
35array.include?(obj)
Gibt true zurück, wennselfcontainsobjenthält, dann gibt true zurück, andernfalls false.
36array.index(obj)
Gibt denselfIndex des ersten Objekts zurück, das gleich obj ist inindex. Wenn keine Übereinstimmung gefunden wird, gibtnil zurück.。
37array.indexes(i1, i2, ... iN) [oder]
array.indices(i1, i2, ... iN)

Diese Methode ist in der neuesten Version von Ruby veraltet, bitte verwenden Sie stattdessen Array#values_at.
38array.indices(i1, i2, ... iN) [oder]
array.indexes(i1, i2, ... iN)

Diese Methode ist in der neuesten Version von Ruby veraltet, bitte verwenden Sie stattdessen Array#values_at.
39array.insert(index, obj...)
an dem angegebenenindexindex, fügen Sie den angegebenen Wert vor dem Element ein; index kann negativ sein.
40array.inspect
Erzeugt eine druckbare Version eines Arrays.
41array.join(sep=$,)
Gibt einen String zurück, der durch Konvertieren jedes Elements des Arrays in einen String und Verwenden vonsepals Trennzeichen zum Verbinden derselben erstellt wird.
42array.last [oder] array.last(n)
Gibt das letzte Element vonselfzurück. Wenn das Arrayleerist, gibt die erste Formnil zurück。
43array.length
Gibt die Anzahl der Elemente inselfzurück. Kann null sein.
44array.map { |item| block } [oder]
array.collect { |item| block }

wirdselfeinmal für jedes Element vonblockaufgerufen. Erstellt ein neues Array, das die vom Block zurückgegebenen Werte enthält.
45array.map! { |item| block } [oder]
array.collect! { |item| block }

wirdarrayeinmal für jedes Element vonblockaufgerufen, wobei das Element durch den vom Block zurückgegebenen Wert ersetzt wird.
46array.nitems
Gibtselfdie Anzahl der Nicht-nil-Elemente in zurück. Kann null sein.
47array.pack(aTemplateString)
Packt den Inhalt des Arrays gemäß den Direktiven in aTemplateString in eine Binärsequenz. Auf die Direktiven A, a und Z kann eine Zahl folgen, die die Breite des resultierenden Feldes angibt. Die übrigen Direktiven können ebenfalls eine Zahl annehmen, die die Anzahl der zu konvertierenden Array-Elemente angibt. Wenn die Zahl ein Sternchen (*) ist, werden alle verbleibenden Array-Elemente konvertiert. Auf jede Direktive kann ein Unterstrich (_) folgen, um anzugeben, dass der angegebene Typ die native Größe der zugrunde liegenden Plattform verwendet; andernfalls verwendet er eine plattformunabhängige konsistente Größe. Leerzeichen werden in der Vorlagenzeichenfolge ignoriert.
48array.pop
Entfernt das letzte Element ausarrayund gibt es zurück. Wennarrayleer ist, gibt esnil zurück.。
49array.push(obj, ...)
Hängt das angegebene obj an das Ende des Arrays an. Der Ausdruck gibt das Array selbst zurück, sodass mehrere Anfügungen verkettet werden können.
50array.rassoc(key)
Durchsucht ein Array, dessen Elemente ebenfalls Arrays sind, wobei == verwendet wird, umkeymit dem zweiten Element jedes enthaltenen Arrays zu vergleichen. Wenn eine Übereinstimmung gefunden wird, wird das erste enthaltene Array zurückgegeben.
51array.reject { |item| block }
Gibt ein neues Array zurück, das die Elemente des Arrays enthält, für die der Block nicht true ergibt.
52array.reject! { |item| block }
Wenn der Block true ergibt, werden Elemente ausarraygelöscht. Wenn es keine Änderung gibt, wirdnilzurückgegeben. Entspricht Array#delete_if.
53array.replace(other_array)
Ersetzt den Inhalt vonarraydurch den Inhalt vonother_array, wobei bei Bedarf gekürzt oder erweitert wird.
54array.reverse
Gibt ein neues Array zurück, das die Elemente des Arrays in umgekehrter Reihenfolge enthält.
55array.reverse!
holdarrayKehrt es um.
56array.reverse_each {|item| block }
Wie Array#each, aberarrayiteriert in umgekehrter Reihenfolge.
57array.rindex(obj)
Gibt den Index des letzten Objekts in array zurück, das gleich obj ist. Wenn keine Übereinstimmung gefunden wird, gibt esnil zurück。
58array.select {|item| block }
Ruft den Block mit aufeinanderfolgenden Elementen aus dem Array auf; gibt ein Array zurück, das die Elemente enthält, für die der Blocktrueeinen wahren Wert zurückgibt.
59array.shift
Gibt das erste Element vonselfzurück und entfernt es (verschiebt alle anderen Elemente um eins nach unten). Wenn das Array leer ist, gibt esnil zurück.。
60array.size
Gibt die Länge vonarrayzurück (die Anzahl der Elemente). Alias für length.
61array.slice(index) [oder] array.slice(start, length) [oder]
array.slice(range) [oder] array[index] [oder]
array[start, length] [oder] array[range]

Gibt das Element bei Indexindexzurück oder gibt ein Unterarray zurück, das beistartbeginnt und fürlength fortgesetzt wirdElemente, oder gibt das durchrangeangegebene Unterarray zurück. Negative Indizes zählen vom Ende des Arrays (-1 ist das letzte Element). Wennindex(oder der Startindex) außerhalb des Bereichs liegt, gibt esnil zurück.。
62array.slice!(index) [oder] array.slice!(start, length) [oder]
array.slice!(range)

Löscht das/die Element(e), die durchindex(length ist optional) oderrangeangegeben werden. Gibt das gelöschte Objekt, das Teilarray zurück oder, wennindexaußerhalb des Bereichs liegt, gibtnil zurück。
63array.sort [or] array.sort { | a,b | block }
Gibt ein sortiertes Array zurück.
64array.sort! [or] array.sort! { | a,b | block }
Sortiert das Array.
65array.to_a
Gibtselfzurück. Wenn es auf eine Unterklasse vonArrayaufgerufen wird, konvertiert es den Empfänger in ein Array-Objekt.
66array.to_ary
Gibt self zurück.
67array.to_s
Gibt self.join zurück.
68array.transpose
Nimmt an, dass self ein Array aus Arrays ist, und transponiert die Zeilen und Spalten.
69array.uniq
Gibt ein neues Array zurück, bei dem ausarraydoppelte Werte entfernt wurden.
70array.uniq!
Entfernt doppelte Elemente ausself. Wenn es keine Änderung gibt (das heißt, es werden keine Duplikate gefunden), wirdnil zurückgegeben.。
71array.unshift(obj, ...)
Fügt das Objekt am Anfang des Arrays ein und verschiebt die anderen Elemente um eins nach hinten.
72array.values_at(selector,...)
Gibt ein Array zurück, das die Elemente von self enthält, die den angegebenenselectorSelektor(en) entsprechen. Die Selektoren können ganzzahlige Indizes oder Bereiche sein.
73array.zip(arg, ...) [oder]
array.zip(arg, ...){ | arr | block }

Konvertiert alle Argumente in Arrays und führt dannArrayelemente mit entsprechenden Elementen aus jedem Argument zusammen.

Array-Pack-Direktiven

Die folgende Tabelle listet die Pack-Direktiven für die Methode Array#pack auf.

DirektiveBeschreibung
@Bewegt zur absoluten Position.
AASCII-String (mit Leerzeichen aufgefüllt, Anzahl ist Breite).
aASCII-String (mit Null aufgefüllt, Anzahl ist Breite).
BBit-String (absteigende Bit-Reihenfolge)
bBit-String (aufsteigende Bit-Reihenfolge).
CVorzeichenloses Zeichen.
cZeichen.
D, dGleitkommazahl mit doppelter Genauigkeit, natives Format.
EGleitkommazahl mit doppelter Genauigkeit, Little-Endian-Byte-Reihenfolge.
eGleitkommazahl mit einfacher Genauigkeit, Little-Endian-Byte-Reihenfolge.
F, fGleitkommazahl mit einfacher Genauigkeit, natives Format.
GGleitkommazahl mit doppelter Genauigkeit, Netzwerk-Byte-Reihenfolge (Big-Endian).
gGleitkommazahl mit einfacher Genauigkeit, Netzwerk-Byte-Reihenfolge (Big-Endian).
HHex-Zeichenkette (höherwertiges Nibble zuerst).
hHex-Zeichenkette (niedrigwertiges Nibble zuerst).
IVorzeichenlose Ganzzahl.
iGanzzahl.
LVorzeichenloses Long.
lLong.
MQuoted-Printable, MIME-Kodierung.
mBase64-codierte Zeichenkette.
NLong, Netzwerk-Byte-Reihenfolge (Big-Endian).
nShort, Netzwerk-Byte-Reihenfolge (Big-Endian).
PZeiger auf eine Struktur (Zeichenkette fester Länge).
pZeiger auf eine nullterminierte Zeichenkette.
Q, q64-Bit-Zahl.
SUnsigned short.
sShort.
UUTF-8.
uUU-codierte Zeichenkette.
VLong, Little-Endian-Byte-Reihenfolge.
vShort, Little-Endian-Byte-Reihenfolge.
wBER-komprimierte Ganzzahl \fnm.
XSpringt ein Byte zurück.
xNull-Byte.
ZWie a, außer dass null mit * hinzugefügt wird.

Beispiel

Probieren Sie das folgende Beispiel aus, das verschiedene Daten packt.

Beispiel

a = [ "a", "b", "c" ] n = [ 65, 66, 67 ] puts a.pack("A3A3A3") #=> "a b c " puts a.pack("a3a3a3") #=> "a\000\000b\000\000c\000\000" puts n.pack("ccc") #=> "ABC"

Die Ausgabe des obigen Beispiels ist:

a  b  c
abc
ABC
Weitere Erweiterungen