English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

RubyArray(Array)

Ruby-Listen sind eine geordnete Sammlung von Objekten mit ganzzahligen Indizes. Jedes Element in der Liste ist mit einem Index verbunden und kann über diesen Index abgerufen werden.

Die Indizes der Liste beginnen bei 0, was in C oder Java ebenfalls der Fall ist. Ein negativer Index wird relativ zur Endseite der Liste gezählt, das heißt, der Index -1 Der letzte Element einer Liste zu kennzeichnen-2 表示数组中的倒数第二个元素,依此类推。

Ruby 数组可存储诸如 String、 Integer、 Fixnum、 Hash、 Symbol 等对象,甚至可以是其他 Array 对象。

Ruby 数组不需要指定大小,当向数组添加元素时,Ruby 数组会自动增长。

创建数组

有多种方式创建或初始化数组。一种方式是通过 new 类方法:

names = Array.new

您可以在创建数组的同时设置数组的大小:

names = Array.new(20)

数组 names 的大小或长度为 20 个元素。您可以使用 size 或 length 方法返回数组的大小:

在线示例

#!/usr/bin/ruby
 
names = Array.new(20)
puts names.size # 返回 20
puts names.length # 返回 20

DieAusgabeergebnissebeiderobenbeispielenaufgeführtsind:

20
20

您可以给数组中的每个元素赋值,如下所示:

在线示例

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

DieAusgabeergebnissebeiderobenbeispielenaufgeführtsind:

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

您也可以使用带有 new 的块,每个元素使用块中的计算结果来填充:

在线示例

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

DieAusgabeergebnissebeiderobenbeispielenaufgeführtsind:

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

数组还有另一种方法,[],如下所示:

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

数组创建的另一种形式如下所示:

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

在 Ruby 核心模块中可以有一个只接收单个参数的 Array 方法,该方法使用一个范围作为参数来创建一个数字数组:

在线示例

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

DieAusgabeergebnissebeiderobenbeispielenaufgeführtsind:

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

数组内建方法

我们需要有一个 Array 对象的示例来调用 Array 方法。下面是创建 Array 对象示例的方式:

Array.[](...) [or] Array[...] [or] [...]

这将返回一个使用给定对象进行填充的新数组。现在,使用创建的对象,我们可以调用任意可用的方法。例如:

在线示例

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

DieAusgabeergebnissebeiderobenbeispielenaufgeführtsind:

6

下面是公共的数组方法(假设 array 是一个 Array 对象):

序号方法 & 描述
1array & other_array
返回一个新的数组,包含两个数组中共同的元素,没有重复。
2array * int [or] array * str
返回一个新的数组,新数组通过连接 self 的 int 副本创建的。带有 String 参数时,相当于 self.join(str)。
3array + other_array
返回一个新的数组,新数组通过连接两个数组产生第三个数组创建的。
4array - other_array
返回一个新的数组,新数组是从初始数组中移除了在 other_array 中出现的项的副本。
5str <=> other_str
把 str 与 other_str 进行比较,返回 -1(小于)、0(等于)或 1(大于)。比较是区分大小写的。
6array | other_array
通过把 other_array 加入 array 中,移除重复项,返回一个新的数组。
7array << obj
把给定的对象附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。
8array <=> other_array
如果数组小于、等于或大于 other_array,则返回一个整数(-1、 0 或 +1)。
9array == other_array
如果两个数组包含相同的元素个数,且每个元素与另一个数组中相对应的元素相等(根据 Object.==),那么这两个数组相等。
10array[index] [or] array[start, length] [or]
array[range] [or] array.slice(index) [or]
array.slice(start, length) [or] array.slice(range)

zurückgeben index bis start von length eine Elemente Unterkatalog, oder gibt zurück range bestimmten Unterkatalog. Negative Indizes zählen von der Ende des Arrays aus (-1 der letzte Element ist)。Wenn index(oder Startindex)ausreichend, dann wird nil
11array[index] = obj [or]
array[start, length] = obj or an_array or nil [or]
array[range] = obj or an_array or nil

设置索引为 index 的元素,或者替换从 start von length 个元素的子数组,或者替换 range 指定的子数组。如果索引大于数组的当前容量,那么数组会自动增长。负值索引从数组末尾开始计数。如果 length 为零则插入元素。如果在第二种或第三种形式中使用了 nil,则从 self 删除元素。
12array.abbrev(pattern = nil)
für self 中的字符串计算明确的缩写集合。如果传递一个模式或一个字符串,只考虑当字符串匹配模式或者以该字符串开始时的情况。
13array.assoc(obj)
Search an array whose elements are also arrays, using obj.== to compare obj with the first element of each containing array. If a match is found, then return the first containing array, if no match is found, then return nil
14array.at(index)
Return the element at index index. A negative index starts from self Count from the end. If the index is out of range, then return nil.
15array.clear
Remove all elements from the array.
16array.collect { |item| block } [or]
array.map { |item| block }

für self Call once for each element in blockErstellt ein neues Array, das die Werte enthält, die block zurückgibt.
17array.collect! { |item| block } [or]
array.map! { |item| block }

für self Call once for each element in blockReplace the element with block is returned, removing all
18array.compact
zurückgegeben self A copy of nil elements.
19array.compact!
Remove all elements from nil elements. If there is no change, then return nil
20array.concat(other_array)
Append the elements of other_array to self in.
21array.delete(obj) [or]
array.delete(obj) { block }

Von self is removed from obj item is returned. If no matching item is found, then return nil. If the optional code is not found and an optional code is given blockThen return block result.
22array.delete_at(index)
Delete the specified index the element at the specified position is deleted, and the element is returned. If the index is out of range, then return nil
23array.delete_if { |item| block }
When block Delete when self each element.
24array.each { |item| block }
für self Call once for each element in blockas an argument.
25array.each_index { |index| block }
Is the same as Array#each, but passes the element indexInstead of passing the element itself.
26array.empty?
If the array itself does not contain any elements, then return true.
27array.eql?(other)
Wenn array and other Are the same object, or two arrays contain the same content, then return true.
28array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }

versucht, Position zurückzugeben index Elementen zurückgegeben. Wenn index außerhalb des Arrays liegt, wird Daher wird der erste Formular IndexError Ausnahme, der zweite Formular gibtdefault block Eingefügt index Werte. Negative Werte index Zählt vom Ende des Arrays aus.
29array.fill(obj) [oder]
array.fill(obj, start [, length]) [oder]
array.fill(obj, range) [oder]
array.fill { |index| block } [oder]
array.fill(start [, length] ) { |index| block } [oder]
array.fill(range) { |index| block }

Die ersten drei Formeln setzen self der ausgewählten Elemente als objMit nil Startwert entspricht null.nil der Länge entspricht self.length。 Die letzten drei Formeln verwenden den Wert des BlocksFülltArray.block Durch den mit dem absoluten Index jedes gefüllten Elements übergeben.
30array.first [oder]
array.first(n)

Gibt den ersten Element oder die ersten n Elementen. Wenn das Array leer ist, gibt der erste Formular nil,der zweite Formular gibt ein leeres Array zurück.
31array.flatten
Gibt ein neues Array zurück, das ein ein dimensionales, verglätlichtes Array ist (rekursiv).
32array.flatten!
umkehrt array Verglätcht. Wird nichts geändert, wird nil。(Das Array enthält keine Unterarrays。)
33array.frozen?
Wenn array gefroren (oder während des Sortierens vorübergehend gefroren), wird true zurückgegeben.
34array.hash
Berechnet den Hashcode des Arrays. Zwei Arrays mit demselben Inhalt haben denselben Hashcode.
35array.include?(obj)
Wenn self enthält obj, wird true zurückgegeben, sonst false.
36array.index(obj)
zurückgegeben self des ersten Objekts zurückgegeben, das obj entspricht index. Wird keine Übereinstimmung gefunden, wird nil
37array.indexes(i1, i2, ... iN) [oder]
array.indices(i1, i2, ... iN)

Diese Methode wurde in der neuesten Version von Ruby abgekündigt, daher verwenden Sie Array#values_at.
38array.indices(i1, i2, ... iN) [oder]
array.indexes(i1, i2, ... iN)

Diese Methode wurde in der neuesten Version von Ruby abgekündigt, daher verwenden Sie Array#values_at.
39array.insert(index, obj...)
Geben Sie index Insertiert den angegebenen Wert vor dem Element, index kann einen negativen Wert haben.
40array.inspect
Erstellt eine druckbare Version der Liste.
41array.join(sep=$,)
Gibt einen String zurück, indem die einzelnen Elemente der Liste in Strings umgewandelt werden und mit sep durch trennen erstellt wurde.
42array.last [oder] array.last(n)
zurückgegeben self das letzte Element. Wenn das Arrayleerwenn, dann gibt die erste Form nil
43array.length
zurückgegeben self der Elemente. Möglicherweise null.
44array.map { |item| block } [oder]
array.collect { |item| block }

für self jedes Element einmal aufruft blockErstellt ein neues Array, das die Werte enthält, die block zurückgibt.
45array.map! { |item| block } [oder]
array.collect! { |item| block }

für array jedes Element einmal aufruft blockund ersetzt die Elemente durch den Wert, der von block zurückgegeben wird.
46array.nitems
zurückgegeben self non-Anzahl der nil-Elemente. Möglicherweise null.
47array.pack(aTemplateString)
Nach den Anweisungen in aTemplateString komprimiert den Inhalt der Liste in eine binäre Sequenz. Die Anweisungen A, a und Z können eine Zahl hinter sich haben, die die Breite des Ergebnisfelds angibt. Die restlichen Anweisungen können ebenfalls eine Zahl haben, die die Anzahl der zu konvertierenden Arrayelemente angibt. Wenn die Zahl ein Stern (*) ist*),dann werden alle verbleibenden Arrayelemente in die umgewandelt. Jeder Anweisung kann ein Unterstrich (_) nachgestellt werden, um anzuzeigen, dass die Basisgröße der lokalen Plattform verwendet wird, anstatt eine einheitliche Größe unabhängig von der Plattform.
48array.pop
Von array Entfernt das letzte Element aus der Mitte und gibt dieses Element zurück. Wenn array Wird zurückgegeben, wenn leer nil
49array.push(obj, ...)
Fügt das gegebene obj an das Ende der Liste an. Diese Ausdrucksform gibt die Liste selbst zurück, sodass mehrere Anhänge hintereinander verbunden werden können.
50array.rassoc(key)
Durchsucht eine Liste, deren Elemente ebenfalls Listen sind, und verwendet ==, um key Vergleicht mit der zweiten Elemente jeder enthaltenen Liste. Gibt die erste Liste zurück, die einen Treffer ergibt.
51array.reject { |item| block }
Gibt ein neues Array zurück, das die Arrayelemente enthält, für die block nicht wahr ist.
52array.reject! { |item| block }
Wenn block wahr ist, von array Elemente löschen, und wenn sich nichts ändert, wird zurückgegeben nilÄquivalent zu Array#delete_if.
53array.replace(other_array)
umkehrt array Inhalte ersetzen durch other_array Inhalte, erforderlichenfalls kürzen oder erweitern.
54array.reverse
Gibt einen neuen Array zurück, der die umgekehrte Reihenfolge der Array-Elemente enthält.
55array.reverse!
umkehrt array umgekehrt.
56array.reverse_each {|item| block }
wie Array#each, aber array umgekehrt.
57array.rindex(obj)
Gibt den Index des letzten Objekts zurück, das gleich obj ist. Wenn keine Übereinstimmung gefunden wird, wird nil
58array.select {|item| block }
den Block, der kontinuierliche Elemente aus dem Array einliest, ruft zurück, gibt eine Array zurück, das Elemente enthält, die der Block zurückgibt true wertige Elemente.
59array.shift
zurückgegeben self das erste Element des Arrays, und entfernt dieses Element (verschiebt alle anderen Elemente um eine Position nach unten). Wenn das Array leer ist, wird nil
60array.size
zurückgegeben array Länge (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]

zurückgeben index bis start von length eine Elemente Unterkatalog, oder gibt zurück range bestimmten Unterkatalog. Negative Indizes zählen von der Ende des Arrays aus (-1 der letzte Element ist)。Wenn index(oder Startindex)ausreichend, dann wird nil
62array.slice!(index) [oder] array.slice!(start, length) [oder]
array.slice!(range)

entfernen index(Länge ist optional)oder range bestimmten Elements. Gibt das gelöschte Objekt, den Unterkatalog zurück, wenn index ausreichend, dann wird nil
63array.sort [oder] array.sort { | a,b | block }
Einen sortierten Array zurückgeben.
64array.sort! [oder] array.sort! { | a,b | block }
den Array sortieren.
65array.to_a
zurückgegeben self。Wenn in Array Aufruf auf der Unterklasse, dann wird der empfangene Parameter in ein Array-Objekt umgewandelt.
66array.to_ary
Gibt self zurück.
67array.to_s
Gibt self.join zurück.
68array.transpose
Annehmen, dass self ein Array von Arrays ist und Zeilen und Spalten vertauscht.
69array.uniq
Gibt ein neues Array zurück, das array Entfernt wiederholte Werte.
70array.uniq!
Von self Entfernt wiederholte Elemente. Wenn es keine Änderungen gibt (das heißt, keine Wiederholungen gefunden wurden), wird nil
71array.unshift(obj, ...)
Setzt das Objekt an den Anfang des Arrays und hebt die anderen Elemente um eine Position nach oben.
72array.values_at(selector,...)
Gibt ein Array zurück, das die self enthält, die mit den angegebenen selector(Ein oder mehrere) entsprechenden Elementen. Der Selector kann ein Integer-Index oder ein Bereich sein.
73array.zip(arg, ...) [oder]
array.zip(arg, ...){ | arr | block }

Jeden Parameter in ein Array umwandeln und dann array Die Elemente mit den entsprechenden Elementen in jedem Parameter kombinieren.

Array pack Anweisung

Die Tabelle unten listet die Komprimierungsanweisungen der Methode Array#pack auf.

AnweisungBeschreibung
@Bewegen Sie sich in die absolute Position.
AASCII-Zeichenkette (mit Leerzeichen gefüllt, count ist Breite).
aASCII-Zeichenkette (mit Null gefüllt, count ist Breite).
BBit-Zeichenkette (in absteigender Reihenfolge).
bBit-Zeichenkette (in aufsteigender Reihenfolge).
CUnsigniertes Zeichen.
cZeichen.
D, dDoppelte Genauigkeit Fließkommazahl, ursprüngliches Format.
EDoppelte Genauigkeit Fließkommazahl, little-endian 字节顺序。
eEinfache Genauigkeit Fließkommazahl, little-endian 字节顺序。
F, fEinfache Genauigkeit Fließkommazahl, ursprüngliches Format.
GDoppelte Genauigkeit Fließkommazahl, Netzwerk(big-endian) Byte-Reihenfolge.
gEinfache Genauigkeit Fließkommazahl, Netzwerk(big-endian) Byte-Reihenfolge.
HHexadezimale Zeichenkette (Hochkeit zuerst).
hHexadezimale Zeichenkette (Niedrigkeit zuerst).
IUnsignierte Ganze Zahl.
iGanze Zahl.
LUnsignierter long.
lLong.
MVerweis auf druckbare, MIME-kodierte.
mBasis64 Zeichenkette kodieren.
NLong, Netzwerk(big-endian) Byte-Reihenfolge.
nShort, Netzwerk(big-endian) Byte-Reihenfolge.
PPunktet auf eine Struktur (Zeichenkette mit festem Länge).
pPunktet auf eine leere Null-Beendete Zeichenkette.
Q, q64 Ziffern.
SUnsignierte short.
sKurz.
UUTF-8。
uUU 编码字符串。
VLong,little-endian 字节顺序。
vShort,little-endian 字节顺序。
wBER 压缩的整数 \fnm。
X向后跳过一个字节。
xNull 字节。
Z与 a 相同,除了 null 会被加上 *。

在线示例

尝试下面的示例,压缩各种数据。

在线示例

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"

DieAusgabeergebnissebeiderobenbeispielenaufgeführtsind:

a  b  c
abc
ABC