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

Ruby 数组(Array)

Ruby array es una colección ordenada de enteros que indexan cualquier objeto. Cada elemento del array está asociado con un índice y se puede obtener mediante él.

El índice del array comienza en 0, como en C o Java. Un índice negativo se refiere al final del array, es decir, el índice de -1 Representa el último elemento del array,-2 representa el segundo elemento desde el final del array, y así sucesivamente.

Los arrays Ruby pueden almacenar objetos como String, Integer, Fixnum, Hash, Symbol, e incluso otros arrays.

Los arrays Ruby no necesitan especificar el tamaño, ya que se expanden automáticamente al agregar elementos.

Crear array

Hay varias formas de crear o inicializar un array. Una de ellas es a través de new Métodos de clase:

names = Array.new

Puede establecer el tamaño del array al crearlo:

names = Array.new(20)

Array names El tamaño o longitud es 20 elementos. Puede usar size o length para obtener el tamaño del array:

在线示例

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

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

20
20

Puede asignar valores a cada elemento del array, como se muestra a continuación:

在线示例

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

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

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

También puede usar un bloque con new, llenando cada elemento con el resultado del cálculo dentro del bloque:

在线示例

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

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

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

El array también tiene otro método, [], como se muestra a continuación:

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

Otra forma de crear un array se muestra a continuación:

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

En el módulo Ruby core, hay un método de Array que recibe un solo parámetro y crea un array de números utilizando un rango como parámetro:

在线示例

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

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

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

Métodos integrados del array

Necesitamos un ejemplo de objeto Array para llamar a los métodos de Array. A continuación se muestra cómo crear un objeto Array de ejemplo:

Array.[](...) [o] Array[...] [o] [...]

Esto devolverá un nuevo array lleno con el objeto dado. Ahora, utilizando el objeto creado, podemos llamar a cualquier método disponible. Por ejemplo:

在线示例

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

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

6

A continuación se presentan los métodos de array comunes (asumiendo array Es un objeto Array):

Número de ordenMétodo & Descripción
1array & other_array
Devuelve un nuevo array que contiene los elementos comunes de dos arrays sin repetición.
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)

regresa el índice del índice hasta el elemento, o regresa desde inicio desde longitud subarray de elementos, o regresa rango el subarray especificado. Los índices negativos comienzan a contar desde el final del array(-1 es el último elemento)。Si índice(o el índice de inicio)fuera de rango, regresa nil
11array[index] = obj [or]
array[start, length] = obj or an_array or nil [or]
array[range] = obj or an_array or nil

设置索引为 índice 的元素,或者替换从 inicio desde longitud 个元素的子数组,或者替换 rango 指定的子数组。如果索引大于数组的当前容量,那么数组会自动增长。负值索引从数组末尾开始计数。如果 longitud 为零则插入元素。如果在第二种或第三种形式中使用了 nil,则从 self 删除元素。
12array.abbrev(pattern = nil)
array.collect! { |item| block } self 中的字符串计算明确的缩写集合。如果传递一个模式或一个字符串,只考虑当字符串匹配模式或者以该字符串开始时的情况。
13array.assoc(obj)
busca un array, cuyos elementos también son arrays, compara obj.== con cada primer elemento de las arrays que contienen obj. Si hay coincidencia, devuelve la primera array que contiene, si no se encuentra coincidencia, devuelve nil
14array.at(index)
devuelve el elemento en la posición index. Un índice negativo comienza desde self comienza a contar desde el final. Si el índice está fuera de rango, devuelve nil.
15array.clear
eliminar todos los elementos del array.
16array.collect { |item| block } [or]
array.map { |item| block }

array.collect! { |item| block } self se llama una vez a cada elemento Se llama una vez a cada uno de los elementosarray.collect { |item| block }
17array.collect! { |item| block } [or]
array.map! { |item| block }

array.collect! { |item| block } self se llama una vez a cada elemento Se llama una vez a cada uno de los elementosreemplazar el elemento con Se llama una vez a cada uno de los elementos devueltos por el valor.
18array.compact
regresa self una copia del array, eliminando todos los nil elementos.
19array.compact!
eliminar todos los elementos nil devuelve si no hay cambios. nil
20elementos.
array.concat(other_array) self agregar los elementos del array other_array a
21en.
array.delete(obj) [or]

desde self array.delete(obj) { block } obj eliminar el elemento igual nil. Si no se encuentra un elemento equivalente y se proporciona un código opcional Se llama una vez a cada uno de los elementosdevuelve Se llama una vez a cada uno de los elementos el resultado.
22array.delete_at(index)
eliminar el elemento especificado índice el elemento en la posición especificada, y devuelve ese elemento. Si el índice está fuera de rango, devuelve nil
23array.delete_if { |item| block }
cuando Se llama una vez a cada uno de los elementos eliminar cuando self cada elemento.
24array.each { |item| block }
array.collect! { |item| block } self se llama una vez a cada elemento Se llama una vez a cada uno de los elementoscomo parámetro.
25array.each_index { |index| block }
es igual que Array#each, pero pasa el elemento índiceen lugar de pasar el elemento en sí.
26array.empty?
si el array en sí no contiene elementos, devuelve true.
27array.eql?(other)
Si array y other es el mismo objeto, o dos arreglos con contenido idéntico, devuelve true.
28array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }

intenta devolver la posición índice elemento en la posición. Si índice se encuentra fuera del array, la primera forma lanzará IndexError ,la segunda forma devolverá default,la tercera forma devolverá la excepción Se llama una vez a cada uno de los elementos se introduce índice los valores. Los valores negativos índice Se cuenta desde el final del 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 }

las primeras tres formas establecen self los elementos seleccionados como obj。Con nil el inicio es cero.nil la longitud es equivalente a self.length。Las últimas tres formas utilizan el valor del bloquerellenararray.Se llama una vez a cada uno de los elementos Se pasa mediante la indexación absoluta de cada elemento rellenado.
30array.first [or]
array.first(n)

Devuelve el primer elemento del array o los primeros n elementos. Si el array está vacío, la primera forma devuelve nil,la segunda forma devuelve un array vacío。
31array.flatten
Devuelve un nuevo array, el nuevo array es un array plano unidimensional (recursivo).
32array.flatten!
invierte array Realiza la planificación. Si no hay cambios, devuelve nil。(El array no contiene subarrays。)
33array.frozen?
Si array está congelado (o temporalmente congelado al ordenar), devuelve true。
34array.hash
calcula el código hash del array. Dos arrays con el mismo contenido tendrán el mismo código hash.
35array.include?(obj)
Si self contiene obj,si es true, de lo contrario, false。
36array.index(obj)
regresa self del primer objeto que es igual a obj índice。Si no se encuentra una coincidencia, se devuelve nil
37array.indexes(i1, i2, ... iN) [or]
array.indices(i1, i2, ... iN)

Este método ha sido descontinuado en la última versión de Ruby, por lo tanto, utilice Array#values_at.
38array.indices(i1, i2, ... iN) [or]
array.indexes(i1, i2, ... iN)

Este método ha sido descontinuado en la última versión de Ruby, por lo tanto, utilice Array#values_at.
39array.insert(index, obj...)
Dado índice Inserta el valor dado antes del elemento, index puede ser un valor negativo.
40array.inspect
array.inspect
41Crea una versión imprimible del array.
array.join(sep=$,) Devuelve una cadena que convierte cada elemento del array en una cadena y los une usando sep
42se crea mediante separación.
regresa self array.last [or] array.last(n)El último elemento dees vacío nil
43Si
regresa self array.length
44El número de elementos en
array.map { |item| block } [or]

array.collect! { |item| block } self por Se llama una vez a cada uno de los elementosarray.collect { |item| block }
45Crea un nuevo array que contiene los valores devueltos por block.
array.map! { |item| block } [or]

array.collect! { |item| block } array por Se llama una vez a cada uno de los elementosy reemplaza los elementos con el valor devuelto por block. block
46array.nitems
regresa self en non-El número de elementos nil. Puede ser cero.
47array.pack(aTemplateString)
Según las instrucciones de aTemplateString, comprime el contenido del array en una secuencia binaria. Las instrucciones A, a y Z pueden seguir un número que representa el ancho del campo de resultado. Las instrucciones restantes también pueden tener un número que representa la cantidad de elementos del array a convertir. Si el número es un asterisco (*),se convertirán todos los elementos restantes del array. Después de cualquier instrucción se puede seguir un subrayado (_) para especificar que el tamaño se use del tamaño local del plataforma subyacente, de lo contrario se usará un tamaño consistente con la plataforma.
48array.pop
desde array Remueve el último elemento del medio y devuelve ese elemento. Si array Devuelve una vacío si está vacío. nil
49array.push(obj, ...)
Añade el obj dado al final del array. La expresión devuelve el array en sí, por lo que se pueden concatenar varios añadidos.
50array.rassoc(key)
Busca un array cuyos elementos también son arrays, usando == para key Compara cada segundo elemento de los arrays incluidos. Si coincide, devuelve el primer array que contiene.
51array.reject { |item| block }
Devuelve un nuevo array que contiene los elementos del array cuando block no es true.
52array.reject! { |item| block }
Cuando el block es verdadero, desde array Elimina elementos, y si no hay cambios devuelve. nilEs equivalente a Array#delete_if.
53array.replace(other_array)
invierte array el contenido en other_array el contenido, truncando o expandiéndolo según sea necesario.
54array.reverse
regresa un nuevo array que contiene los elementos del array en orden inverso.
55array.reverse!
invierte array invierte.
56array.reverse_each {|item| bloque }
es igual a Array#each, pero invierte array invierte.
57array.rindex(obj)
regresa el índice del último objeto igual a obj en array. Si no se encuentra una coincidencia, regresa nil
58array.select {|item| bloque }
invoca el bloque con elementos consecutivos del array, regresando un array que contiene lo que devuelve el bloque. true al valor del elemento.
59array.shift
regresa self el primer elemento del array, y lo elimina (moviendo todos los otros elementos una posición hacia abajo). Si el array está vacío, regresa nil
60array.size
regresa array la longitud (número de elementos). Alias de length.
61array.slice(índice) [o] array.slice(inicio, longitud) [o]
array.slice(rango) [o] array[índice] [o]
array[inicio, longitud] [o] array[rango]

regresa el índice del índice hasta el elemento, o regresa desde inicio desde longitud subarray de elementos, o regresa rango el subarray especificado. Los índices negativos comienzan a contar desde el final del array(-1 es el último elemento)。Si índice(o el índice de inicio)fuera de rango, regresa nil
62array.slice!(índice) [o] array.slice!(inicio, longitud) [o]
array.slice!(rango)

eliminar índice(longitud opcional)o rango el elemento especificado. Regresa el objeto eliminado, el subarray, si índice fuera de rango, regresa nil
63array.sort [o] array.sort { | a,b | bloque }
regresa un array ordenado.
64array.sort! [o] array.sort! { | a,b | bloque }
ordena el array.
65array.to_a
regresa self。Si en Array Llamar al método en la subclase, convierte los parámetros recibidos en un objeto Array.
66array.to_ary
devuelve self.
67array.to_s
devuelve self.join.
68array.transpose
asumiendo que self es un array de arrays y cambia filas y columnas.
69array.uniq
devuelve un nuevo array que elimina array elementos repetidos.
70array.uniq!
desde self eliminar elementos repetidos. Si no hay cambios (es decir, no se encontraron repetidos), se devuelve nil
71array.unshift(obj, ...)
coloca el objeto al principio del array, otros elementos se desplazan una posición.
72array.values_at(selector,...)
devuelve un array que contiene self con los elementos dados selectoruno o más) elementos correspondientes. El selector puede ser un índice entero o un rango.
73array.zip(arg, ...) [o]
array.zip(arg, ...){ | arr | block }

cualquier parámetro se convierte en un array, luego array los elementos se combinan con los elementos correspondientes de cada parámetro.

instrucciones de empaquetado de array

La siguiente tabla enumera las instrucciones de compresión del método Array#pack.

instruccióndescripción
@moverse a una posición absoluta.
Acadena ASCII (rellenada con espacio, count es el ancho).
acadena ASCII (rellenada con null, count es el ancho).
Bcadena de bits (descendente).
bcadena de bits (ascendente).
Ccarácter sin signo.
ccarácter.
D, dnúmero de coma flotante de precisión doble, formato nativo.
Enúmero de coma flotante de precisión doble, little.-endian 字节顺序。
enúmero de coma flotante de precisión simple, little.-endian 字节顺序。
F, fnúmero de coma flotante de precisión simple, formato nativo.
Gnúmero de coma flotante de precisión doble, red de gran-orden de bytes endian).
gnúmero de coma flotante de precisión simple, red de gran-orden de bytes endian).
Hcadena hexadecimal (alta prioridad).
hcadena hexadecimal (bajo prioridad).
Ientero sin signo.
ientero.
LLong sin signo.
lLong
Mreferencia codificada, codificación MIME.
mBase64 código de cadena.
NLong, red de gran-orden de bytes endian).
nShort, red de gran-orden de bytes endian).
Papunta a una estructura (cadena de longitud fija).
papunta a una cadena de finalización nula.
Q, q64 dígito de posición.
SShort sin signo.
sCorto.
UUTF-8。
uUU 编码字符串。
VLong,小端-endian 字节顺序。
vShort,小端-endian 字节顺序。
wBER 压缩的整数 \fnm。
X向后跳过一个字节。
x空字节。
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