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:
Sie können die Größe des Arrays festlegen, während Sie es erstellen:
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
Ausprobieren »
Die Ausgabe des obigen Beispiels ist:
20 20
Sie können jedem Element des Arrays Werte zuweisen, wie unten gezeigt:
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:
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:
Eine andere Form der Array-Erstellung ist wie folgt:
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
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:
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
Die Ausgabe des obigen Beispiels ist:
6
Die folgenden sind die öffentlichen Array-Methoden (vorausgesetzt,arrayist ein Array-Objekt):
| Nein. | Methode & Beschreibung |
|---|---|
| 1 | array & other_array Gibt ein neues Array zurück, das die gemeinsamen Elemente beider Arrays ohne Duplikate enthält. |
| 2 | array * 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). |
| 3 | array + other_array Gibt ein neues Array zurück, das durch Verkettung zweier Arrays zu einem dritten Array entsteht. |
| 4 | array - other_array Gibt ein neues Array zurück, das eine Kopie des ursprünglichen Arrays ist, wobei in other_array vorkommende Elemente entfernt wurden. |
| 5 | str <=> 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. |
| 6 | array | other_array Gibt ein neues Array zurück, indem other_array zum Array hinzugefügt und Duplikate entfernt werden. |
| 7 | array << 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. |
| 8 | array <=> other_array Gibt eine Ganzzahl (-1, 0 oder +1) zurück, wenn das Array kleiner als, gleich oder größer als other_array ist. |
| 9 | array == 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.==). |
| 10 | array[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。 |
| 11 | array[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. |
| 12 | array.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. |
| 13 | array.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.。 |
| 14 | array.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. |
| 15 | array.clear Entfernt alle Elemente aus dem Array. |
| 16 | array.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. |
| 17 | array.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. |
| 18 | array.compact Gibt eine Kopie vonselfzurück, bei der allenil-Elemente entfernt wurden. |
| 19 | array.compact! Entfernt allenil-Elemente aus dem Array. Wenn keine Änderung erfolgt, gibtnil zurück.。 |
| 20 | array.concat(other_array) Hängt die Elemente von other_array anself an.. |
| 21 | array.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. |
| 22 | array.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.。 |
| 23 | array.delete_if { |item| block } Wennblockwahr ist, löschtselfjedes Element des Arrays. |
| 24 | array.each { |item| block } istselfRuft den Block einmal für jedes Element inblockauf und übergibt das Element als Argument. |
| 25 | array.each_index { |index| block } Wie Array#each, übergibt aber denindexindex des Elements anstelle des Elements selbst. |
| 26 | array.empty? Gibt true zurück, wenn das Array selbst keine Elemente enthält. |
| 27 | array.eql?(other) Gibt true zurück, wennarrayundotherdasselbe Objekt ist oder wenn die beiden Arrays denselben Inhalt haben. |
| 28 | array.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. |
| 29 | array.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. |
| 30 | array.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. |
| 31 | array.flatten Gibt ein neues Array zurück, das ein eindimensionales abgeflachtes Array ist (rekursiv). |
| 32 | array.flatten! behältarrayFührt eine Abflachung durch. Wenn es keine Änderung gibt, wirdnilzurückgegeben. (Das Array enthält keine Unterarrays.) |
| 33 | array.frozen? Gibt true zurück, wennarrayeingefroren ist (oder während des Sortierens vorübergehend eingefroren). |
| 34 | array.hash Berechnet den Hash-Code für das Array. Zwei Arrays mit demselben Inhalt haben denselben Hash-Code. |
| 35 | array.include?(obj) Gibt true zurück, wennselfcontainsobjenthält, dann gibt true zurück, andernfalls false. |
| 36 | array.index(obj) Gibt denselfIndex des ersten Objekts zurück, das gleich obj ist inindex. Wenn keine Übereinstimmung gefunden wird, gibtnil zurück.。 |
| 37 | array.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. |
| 38 | array.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. |
| 39 | array.insert(index, obj...) an dem angegebenenindexindex, fügen Sie den angegebenen Wert vor dem Element ein; index kann negativ sein. |
| 40 | array.inspect Erzeugt eine druckbare Version eines Arrays. |
| 41 | array.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. |
| 42 | array.last [oder] array.last(n) Gibt das letzte Element vonselfzurück. Wenn das Arrayleerist, gibt die erste Formnil zurück。 |
| 43 | array.length Gibt die Anzahl der Elemente inselfzurück. Kann null sein. |
| 44 | array.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. |
| 45 | array.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. |
| 46 | array.nitems Gibtselfdie Anzahl der Nicht-nil-Elemente in zurück. Kann null sein. |
| 47 | array.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. |
| 48 | array.pop Entfernt das letzte Element ausarrayund gibt es zurück. Wennarrayleer ist, gibt esnil zurück.。 |
| 49 | array.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. |
| 50 | array.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. |
| 51 | array.reject { |item| block } Gibt ein neues Array zurück, das die Elemente des Arrays enthält, für die der Block nicht true ergibt. |
| 52 | array.reject! { |item| block } Wenn der Block true ergibt, werden Elemente ausarraygelöscht. Wenn es keine Änderung gibt, wirdnilzurückgegeben. Entspricht Array#delete_if. |
| 53 | array.replace(other_array) Ersetzt den Inhalt vonarraydurch den Inhalt vonother_array, wobei bei Bedarf gekürzt oder erweitert wird. |
| 54 | array.reverse Gibt ein neues Array zurück, das die Elemente des Arrays in umgekehrter Reihenfolge enthält. |
| 55 | array.reverse! holdarrayKehrt es um. |
| 56 | array.reverse_each {|item| block } Wie Array#each, aberarrayiteriert in umgekehrter Reihenfolge. |
| 57 | array.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。 |
| 58 | array.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. |
| 59 | array.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.。 |
| 60 | array.size Gibt die Länge vonarrayzurück (die Anzahl der Elemente). Alias für length. |
| 61 | array.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.。 |
| 62 | array.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。 |
| 63 | array.sort [or] array.sort { | a,b | block } Gibt ein sortiertes Array zurück. |
| 64 | array.sort! [or] array.sort! { | a,b | block } Sortiert das Array. |
| 65 | array.to_a Gibtselfzurück. Wenn es auf eine Unterklasse vonArrayaufgerufen wird, konvertiert es den Empfänger in ein Array-Objekt. |
| 66 | array.to_ary Gibt self zurück. |
| 67 | array.to_s Gibt self.join zurück. |
| 68 | array.transpose Nimmt an, dass self ein Array aus Arrays ist, und transponiert die Zeilen und Spalten. |
| 69 | array.uniq Gibt ein neues Array zurück, bei dem ausarraydoppelte Werte entfernt wurden. |
| 70 | array.uniq! Entfernt doppelte Elemente ausself. Wenn es keine Änderung gibt (das heißt, es werden keine Duplikate gefunden), wirdnil zurückgegeben.。 |
| 71 | array.unshift(obj, ...) Fügt das Objekt am Anfang des Arrays ein und verschiebt die anderen Elemente um eins nach hinten. |
| 72 | array.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. |
| 73 | array.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.
| Direktive | Beschreibung |
|---|---|
| @ | Bewegt zur absoluten Position. |
| A | ASCII-String (mit Leerzeichen aufgefüllt, Anzahl ist Breite). |
| a | ASCII-String (mit Null aufgefüllt, Anzahl ist Breite). |
| B | Bit-String (absteigende Bit-Reihenfolge) |
| b | Bit-String (aufsteigende Bit-Reihenfolge). |
| C | Vorzeichenloses Zeichen. |
| c | Zeichen. |
| D, d | Gleitkommazahl mit doppelter Genauigkeit, natives Format. |
| E | Gleitkommazahl mit doppelter Genauigkeit, Little-Endian-Byte-Reihenfolge. |
| e | Gleitkommazahl mit einfacher Genauigkeit, Little-Endian-Byte-Reihenfolge. |
| F, f | Gleitkommazahl mit einfacher Genauigkeit, natives Format. |
| G | Gleitkommazahl mit doppelter Genauigkeit, Netzwerk-Byte-Reihenfolge (Big-Endian). |
| g | Gleitkommazahl mit einfacher Genauigkeit, Netzwerk-Byte-Reihenfolge (Big-Endian). |
| H | Hex-Zeichenkette (höherwertiges Nibble zuerst). |
| h | Hex-Zeichenkette (niedrigwertiges Nibble zuerst). |
| I | Vorzeichenlose Ganzzahl. |
| i | Ganzzahl. |
| L | Vorzeichenloses Long. |
| l | Long. |
| M | Quoted-Printable, MIME-Kodierung. |
| m | Base64-codierte Zeichenkette. |
| N | Long, Netzwerk-Byte-Reihenfolge (Big-Endian). |
| n | Short, Netzwerk-Byte-Reihenfolge (Big-Endian). |
| P | Zeiger auf eine Struktur (Zeichenkette fester Länge). |
| p | Zeiger auf eine nullterminierte Zeichenkette. |
| Q, q | 64-Bit-Zahl. |
| S | Unsigned short. |
| s | Short. |
| U | UTF-8. |
| u | UU-codierte Zeichenkette. |
| V | Long, Little-Endian-Byte-Reihenfolge. |
| v | Short, Little-Endian-Byte-Reihenfolge. |
| w | BER-komprimierte Ganzzahl \fnm. |
| X | Springt ein Byte zurück. |
| x | Null-Byte. |
| Z | Wie a, außer dass null mit * hinzugefügt wird. |
Beispiel
Probieren Sie das folgende Beispiel aus, das verschiedene Daten packt.
Beispiel
Die Ausgabe des obigen Beispiels ist:
a b c abc ABCWeitere Erweiterungen