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

Ruby 数组(Array)

Ruby 数组是任何对象的有序整数索引集合。数组中的每个元素都与一个索引相关,并可通过索引进行获取。

数组的索引从 0 开始,这与 C 或 Java 中一样。一个负数的索相对于数组的末尾计数的,也就是说,索引为 -1 表示数组的最后一个元素,-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

以上示例运行输出结果为:

20
20

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

在线示例

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

以上示例运行输出结果为:

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

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

在线示例

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

以上示例运行输出结果为:

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

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

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

Un'altra forma di creazione dell'array è come segue:}

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

In Ruby Core Module c'è un metodo Array che accetta un singolo parametro e utilizza un intervallo come parametro per creare un array numerico:

在线示例

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

以上示例运行输出结果为:

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

Metodi nativi degli array

Abbiamo bisogno di un esempio di oggetto Array per chiamare i metodi di Array. Di seguito sono riportati i modi per creare un oggetto Array:

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

Questo restituirà un nuovo array riempito con l'oggetto fornito. Ora, utilizzando l'oggetto creato, possiamo chiamare qualsiasi metodo disponibile. Ad esempio:

在线示例

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

以上示例运行输出结果为:

6

Di seguito sono riportati i metodi pubblici degli array (supponendo array È un'istanza dell'oggetto Array):

Numero di ordineMetodo & Descrizione
1array & other_array
Restituisce un nuovo array che contiene gli elementi comuni ai due array, senza duplicati.
2array * int [or] array * str
Restituisce un nuovo array, creato connettendo copie dell'oggetto self. Quando viene fornito un parametro String, è equivalente a self.join(str).
3array + other_array
Restituisce un nuovo array, che è il risultato della connessione di due array per creare un terzo array.
4array - other_array
Restituisce un nuovo array, che è una copia dell'array iniziale con gli elementi presenti in other_array rimossi.
5str <=> other_str
Confronta la stringa str con other_str, restituisce -1 (minore), 0 (uguale) o 1 (maggiore). Il confronto è case-sensitive.
6array | other_array
Aggiungendo other_array a array, rimuovi gli elementi duplicati e restituisci un nuovo array.
7array << obj
Aggiungi l'oggetto specificato alla fine dell'array. L'espressione restituisce l'array stesso, quindi è possibile concatenare più aggiunte.
8array <=> other_array
Se l'array è minore, uguale o maggiore di other_array, restituisce un intero (-1, 0 o +1).
9array == other_array
Se due array contengono lo stesso numero di elementi e ciascun elemento è uguale all'elemento corrispondente dell'altro array (secondo Object.==), allora i due array sono uguali.
10array[index] [o] array[start, length] [o]
array[range] [o] array.slice(index) [o]
array.slice(start, length) [o] array.slice(range)

array[start, length] [o] array[range] index Restituisce l'indice dell'elemento l'elemento, o restituisce da start dall'inizio fino a length range l'array secondario di elementi specificati, o restituisce indexSe (o l'indice di partenza) è fuori dalla gamma, restituisce Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
11array[index] = obj [o]
array[start, length] = obj or an_array or nil [o]
array[range] = obj or an_array or nil

impostare l'indice a index elementi, o sostituire l'elemento, o restituisce da start dall'inizio fino a un sottosettore di array di range sottosettore specificato. Se l'indice è maggiore della capacità corrente dell'array, l'array si espande automaticamente. Un valore negativo dell'indice parte dall'inizio fino a se zero, inserire l'elemento. Se viene utilizzato nel secondo o terzo forma, Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscedall'inizio da rimuovere l'elemento.
12array.abbrev(pattern = nil)
da calcoli espliciti di insieme di abbreviazioni di stringhe. Se viene passato un modello o una stringa, considera solo quando la stringa corrisponde al modello o inizia con la stringa.
13array.assoc(obj)
ricerca un array, i cui elementi sono anche array, confrontando l'oggetto obj con l'elemento primo di ogni array contenuto utilizzando obj.==. Se corrisponde, restituisce il primo array contenuto; se non trova corrispondenze, restituisce Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
14array.at(index)
Restituire l'elemento all'indice index. Un valore negativo dell'indice parte da contare dall'estremità inferiore. Se l'indice è fuori da scala, restituisce nil.
15array.clear
rimuovendo tutti gli elementi dall'array.
16array.collect { |item| block } [o]
array.map { |item| block }

da chiama una volta per ogni elemento block。创建一个新的数组,包含 block 返回的值。
17array.collect! { |item| block } [o]
array.map! { |item| block }

da chiama una volta per ogni elemento blocke sostituendo gli elementi con block valore restituito.
18array.compact
Restituisce da della copia, rimuovendo tutti i Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituisce elementi.
19array.compact!
rimuovi tutti gli elementi dall'array Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituisce elementi. Se non ci sono cambiamenti, restituisce Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
20array.concat(other_array)
aggiungi gli elementi di other_array all'array da dentro.
21array.delete(obj) [or]
array.delete(obj) { block }

array.uniq! da elimina uguale obj l'elemento. Se non viene trovato un elemento uguale, restituisce Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscese non viene trovato un elemento uguale e viene fornito il codice opzionale blockse block il risultato.
22array.delete_at(index)
eliminare l'indicizzato specificato index l'elemento all'indirizzo, e restituisce l'elemento. Se l'indice è fuori da scala, restituisce Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
23array.delete_if { |item| block }
quando block quando true, elimina da per ogni elemento.
24array.each { |item| block }
da chiama una volta per ogni elemento blockpassando l'elemento come parametro.
25array.each_index { |index| block }
uguale a Array#each, ma passing l'elemento indexinvece di passare l'elemento stesso.
26array.empty?
Se l'array stesso non contiene elementi, restituirà true.
27array.eql?(altro)
如果 array e altro è lo stesso oggetto, o due array hanno lo stesso contenuto, allora restituirà true.
28array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }

tentare di restituire la posizione index l'elemento. Se index al di fuori dell'array, la prima forma solleverà IndexError eccezione, la seconda forma restituirà default,la terza forma restituirà la chiamata block inviare index valore. I valori negativi index Contare da fine dell'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 }

前面三种形式设置 da 的被选元素为 obj。以 Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituisce 开头相当于零。Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituisce 的长度相当于 self.length。最后三种形式用 block 的值填充数组。block 通过带有被填充的每个元素的绝对索引来传递。
30array.first [or]
array.first(n)

返回数组的第一个元素或前 n 个元素。如果数组为空,则第一种形式返回 Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituisce,第二种形式返回一个空的数组。
31array.flatten
返回一个新的数组,新数组是一个一维的扁平化的数组(递归)。
32array.flatten!
array 进行扁平化。如果没有变化则返回 Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituisce。(数组不包含子数组。)
33array.frozen?
如果 array 被冻结(或排序时暂时冻结),则返回 true。
34array.hash
计算数组的哈希代码。两个具有相同内容的数组将具有相同的哈希代码。
35array.include?(obj)
如果 da 中包含 obj,则返回 true,否则返回 false。
36array.index(obj)
Restituisce da 中第一个等于 obj 的对象的 index。如果未找到匹配则返回 Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
37array.indexes(i1, i2, ... iN) [or]
array.indices(i1, i2, ... iN)

该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。
38array.indices(i1, i2, ... iN) [or]
array.indexes(i1, i2, ... iN)

该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。
39array.insert(index, obj...)
在给定的 index 的元素前插入给定的值,index 可以是负值。
40array.inspect
创建一个数组的可打印版本。
41array.join(sep=$,)
返回一个字符串,通过把数组的每个元素转换为字符串,并使用 sep 分隔进行创建的。
42array.last [or] array.last(n)
Restituisce da 的最后一个元素。如果数组为,则第一种形式返回 Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
43array.length
Restituisce da 中元素的个数。可能为零。
44array.map { |item| block } [or]
array.collect { |item| block }

da 的每个元素调用一次 block。创建一个新的数组,包含 block 返回的值。
45array.map! { |item| block } [or]
array.collect! { |item| block }

array 的每个元素调用一次 block,把元素替换为 block 返回的值。
46array.nitems
Restituisce da 中 non-nil 元素的个数。可能为零。
47array.pack(aTemplateString)
根据 aTemplateString 中的指令,把数组的内容压缩为二进制序列。指令 A、 a 和 Z 后可以跟一个表示结果字段宽度的数字。剩余的指令也可以带有一个表示要转换的数组元素个数的数字。如果数字是一个星号(*),则所有剩余的数组元素都将被转换。任何指令后都可以跟一个下划线(_),表示指定类型使用底层平台的本地尺寸大小,否则使用独立于平台的一致的尺寸大小。在模板字符串中空格会被忽略。
48array.pop
array.uniq! array 中移除最后一个元素,并返回该元素。如果 array 为空则返回 Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
49array.push(obj, ...)
把给定的 obj 附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。
50array.rassoc(key)
搜索一个数组,其元素也是数组,使用 == 把 key 与每个包含的数组的第二个元素进行比较。如果匹配则返回第一个包含的数组。
51array.reject { |item| block }
返回一个新的数组,包含当 block 不为 true 时的数组项。
52array.reject! { |item| block }
当 block 为真时,从 array 删除元素,如果没有变化则返回 Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituisce。相当于 Array#delete_if。
53array.replace(other_array)
array 的内容替换为 other_array 的内容,必要的时候进行截断或扩充。
54array.reverse
返回一个新的数组,包含倒序排列的数组元素。
55array.reverse!
array Condiviso con Array#each, ma passa un array consecutivo di elementi all blocco, restituendo un array che contiene i valori restituiti dal blocco.
56array.reverse_each {|item| block }
与 Array#each 相同,但是把 array Condiviso con Array#each, ma passa un array consecutivo di elementi all blocco, restituendo un array che contiene i valori restituiti dal blocco.
inverte.57
array.rindex(obj) Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
Restituisce l'indice dell'ultimo oggetto in array uguale a obj. Se non trova corrispondenze, restituisce58
array.select {|item| block } Chiamare il blocco da passare all'array, restituendo un array che contiene i valori restituiti dal blocco. true
l'elemento con il valore specificato.59
Restituisce da array.shift Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
Restituisce l'elemento iniziale dell'array e lo rimuove (spostando tutti gli altri elementi di una posizione). Se l'array è vuoto, restituisce60
Restituisce array array.size
la lunghezza (il numero di elementi). Alias di length.61
array.slice(index) [o] array.slice(start, length) [o]
array.slice(range) [o] array[index] [o]

array[start, length] [o] array[range] index Restituisce l'indice dell'elemento l'elemento, o restituisce da start dall'inizio fino a length range l'array secondario di elementi specificati, o restituisce indexSe (o l'indice di partenza) è fuori dalla gamma, restituisce Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
62array.slice!(index) [o] array.slice!(start, length) [o]
array.slice!(range)

elimina index(la lunghezza è opzionale) o range l'elemento specificato. Restituisce l'oggetto rimosso, l'array secondario, se index Se fuori dalla gamma, restituisce Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
63array.sort [o] array.sort { | a,b | block }
Restituisce un array ordinato.
64array.sort! [o] array.sort! { | a,b | block }
Ordina l'array.
65array.to_a
Restituisce da. Se in Array Se chiamato su una sottoclasse di Array, allora il parametro ricevuto viene convertito in un oggetto Array.
66array.to_ary
Restituisce self.
67array.to_s
Restituisce self.join.
68array.transpose
Supponiamo che self sia un array di array e che le righe e le colonne siano scambiate.
69array.uniq
返回一个新的数组,移除了 array array.uniq
Ritorna un nuovo array che rimuove i valori duplicati dall'array.70
array.uniq! da self Rimuove gli elementi duplicati dall'array. Se non ci sono cambiamenti (cioè, non è stata trovata alcuna duplicazione), restituiscenil
.71
array.unshift(obj, ...)
Rimuove gli elementi duplicati dall'inizio dell'array, spostando gli altri elementi di una posizione.72
Restituisce un array che contiene gli elementi di self corrispondenti al selettore dato. selettore(uno o più) elementi corrispondenti. Il selettore può essere un indice intero o un intervallo.
73array.zip(arg, ...) [o]
array.zip(arg, ...){ | arr | block }

Converti qualsiasi parametro in un array, poi array gli elementi dell'array corrispondono agli elementi corrispondenti di ciascun parametro.

Istruzioni di pack dell'array

La tabella seguente elenca le istruzioni di compressione del metodo Array#pack.

IstruzioneDescrizione
@Muovi alla posizione assoluta.
AStringa ASCII (riempita con space, count è la larghezza).
aStringa ASCII (riempita con null, count è la larghezza).
BStringa di bit (ordinata in diminuzione).
bStringa di bit (ordinata in aumento).
Cunsigned char.
cCarattere.
D, dNumero a virgola mobile a precisione doppia, formato nativo.
ENumero a virgola mobile a precisione doppia, ordine di byte little-endian.
eNumero a virgola mobile a precisione singola, ordine di byte little-endian.
F, fNumero a virgola mobile a precisione singola, formato nativo.
GNumero a virgola mobile a precisione doppia, ordine di byte di rete (big-endian).
gNumero a virgola mobile a precisione singola, ordine di byte di rete (big-endian).
HStringa esadecimale (高位优先).
hStringa esadecimale (低位优先).
Iunsigned int.
iIntero.
Lunsigned long.
lLong.
MRiferimento a un MIME codificato stampabile.
mStringa di codifica Base64.
NLong, ordine di byte di rete (big-endian).
nShort, ordine di byte di rete (big-endian).
PPunta a una struttura (stringa di lunghezza fissa).
pPunta a una stringa di fine nulla.
Q, qNumero a 64 bit.
Sunsigned short.
sShort.
UUTF-8.
uStringa di codifica UU.
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"

以上示例运行输出结果为:

a  b  c
abc
ABC