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

Tableaux (Array) Ruby

Les tableaux Ruby sont des ensembles d'indices entiers ordonnés de n'importe quel objet. Chaque élément du tableau est associé à un index et peut être récupéré via cet index.

Les indices des tableaux commencent à 0, comme en C ou en Java. Un index négatif se réfère à la fin du tableau, c'est-à-dire, l'index de -1 représente l'élément dernier d'un tableau,-2 représente l'élément deuxièmement dernier du tableau, et ainsi de suite.

Les tableaux Ruby peuvent stocker des objets tels que String, Integer, Fixnum, Hash, Symbol, etc., et peuvent même être d'autres objets Array.

Les tableaux Ruby n'ont pas besoin de spécifier la taille, ils grandissent automatiquement lorsque des éléments sont ajoutés.

Création du tableau

Il y a plusieurs façons de créer ou d'initialiser un tableau. Une des façons est par new Méthode de classe :

names = Array.new

Vous pouvez définir la taille du tableau lors de sa création :

names = Array.new(20)

Tableau names La taille ou la longueur est 20 élément. Vous pouvez utiliser la méthode size ou length pour obtenir la taille du tableau :

Exemple en ligne

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

Les résultats de l'exemple ci-dessus sont les suivants :

20
20

Vous pouvez assigner une valeur à chaque élément du tableau, comme indiqué ci-dessous :

Exemple en ligne

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

Les résultats de l'exemple ci-dessus sont les suivants :

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

Vous pouvez également utiliser un bloc avec new, chaque élément étant rempli du résultat du bloc :

Exemple en ligne

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

Les résultats de l'exemple ci-dessus sont les suivants :

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

Un autre moyen de créer un tableau, [], est indiqué ci-dessous :

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

Une autre forme de création de tableau est indiquée ci-dessous :

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

Dans le module Ruby core, il peut y avoir une méthode Array qui reçoit un seul paramètre et qui crée un tableau de nombres en utilisant une plage comme paramètre :

Exemple en ligne

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

Les résultats de l'exemple ci-dessus sont les suivants :

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

Méthodes intégrées du tableau

Nous devons avoir un exemple d'objet Array pour appeler les méthodes Array. Voici comment créer un objet Array :

Array.[](...) [ou] Array[...] [ou] [...]

Cela retournera un nouveau tableau rempli de l'objet donné. Maintenant, en utilisant l'objet créé, nous pouvons appeler n'importe quelle méthode disponible. Par exemple :

Exemple en ligne

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

Les résultats de l'exemple ci-dessus sont les suivants :

6

Voici les méthodes communes des tableaux (hypothèse) array C'est un objet Array (Array Object) :

Numéro de séquenceMéthode & Description
1array & other_array
Retourne un nouveau tableau contenant les éléments communs aux deux tableaux sans répétition.
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)

Retourne l'index de index des éléments, ou retourne à partir de début de début jusqu'à length un sous-array de n éléments, ou retourne range le sous-array spécifié. Un index négatif commence à compter de la fin de l'array (-1 est le dernier élément). Si index(ou l'index de départ)Hors de portée, retourne nil
11array[index] = obj [or]
array[start, length] = obj or an_array or nil [or]
array[range] = obj or an_array or nil

设置索引为 index 的元素,或者替换从 début de début jusqu'à length 个元素的子数组,或者替换 range 指定的子数组。如果索引大于数组的当前容量,那么数组会自动增长。负值索引从数组末尾开始计数。如果 length 为零则插入元素。如果在第二种或第三种形式中使用了 nil,则从 self 删除元素。
12array.abbrev(pattern = nil)
array.collect! { |item| block } self 中的字符串计算明确的缩写集合。如果传递一个模式或一个字符串,只考虑当字符串匹配模式或者以该字符串开始时的情况。
13array.assoc(obj)
cherche un tableau, whose éléments sont aussi des tableaux, en comparant obj.== avec chaque premier élément des tableaux contenus. Si une correspondance est trouvée, retourne le premier tableau contenant, si non trouvé, retourne nil
14array.at(index)
retourne l'élément à l'index spécifié. Un index négatif commence self compte à partir de la fin du tableau. Si l'index dépasse la gamme, retourne nil.
15array.clear
supprime tous les éléments du tableau.
16array.collect { |item| block } [or]
array.map { |item| block }

array.collect! { |item| block } self appelle une fois chaque élément appelle chaque élémentarray.collect { |item| block }
17array.collect! { |item| block } [or]
array.map! { |item| block }

array.collect! { |item| block } self appelle une fois chaque élément appelle chaque élémentet remplace l'élément par appelle chaque élément valeurs retournées.
18array.compact
retourne self la copie du tableau, supprime tous les nil les éléments.
19array.compact!
supprime tous les éléments nil les éléments. nil
20array.concat(other_array)
ajoute les éléments de other_array à self .
21l'élément
array.delete(obj) [or]

de self array.delete(obj) { block } obj l'élément équivalent nilsi l'élément équivalent n'est pas trouvé et que le code optionnel appelle chaque élémentsi appelle chaque élément le résultat.
22array.delete_at(index)
supprime l'élément spécifié index l'élément à la position spécifiée, et retourne cet élément. Si l'index dépasse la gamme, retourne nil
23array.delete_if { |item| block }
quand appelle chaque élément supprime l'élément lorsque self de chaque élément.
24array.each { |item| block }
array.collect! { |item| block } self appelle une fois chaque élément appelle chaque élémentet transmet cet élément en tant que paramètre.
25array.each_index { |index| block }
comme Array#each, mais transmet l'élément indexplutôt que de transmettre l'élément lui-même.
26array.empty?
si le tableau lui-même ne contient pas d'éléments, retourne true.
27array.eql?(other)
Si array et other sont les mêmes objets, ou deux tableaux contiennent du contenu identique, alors retourne true.
28array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }

Essayer de retourner la position index de l'élément à index Situé à l'extérieur de l'array, la première forme lèvera IndexError Exception, la deuxième forme retourne defaultLa troisième forme retourne l'appel appelle chaque élément Transmis index La valeur. index Commencer à compter à partir de la fin de l'array.
29array.fill(obj) [ou]
array.fill(obj, start [, length]) [ou]
array.fill(obj, range) [ou]
array.fill { |index| block } [ou]
array.fill(start [, length] ) { |index| block } [ou]
array.fill(range) { |index| block }

Les trois premières formes définissent self des éléments sélectionnés comme obj. Avec nil Le début équivaut à zéro.nil La longueur équivaut à self.length. Les trois dernières formes utilisent la valeur du block.Remplirarray.appelle chaque élément Passer par l'index absolu de chaque élément rempli.
30array.first [ou]
array.first(n)

Retourne le premier élément de l'array ou les n d'éléments. Si l'array est vide, la première forme retourne nil, la deuxième forme retourne un tableau vide.
31array.flatten
Retourne un nouveau tableau, un tableau à un seul dimension et plat (par récursion).
32array.flatten!
Inverser array Flattener. Si il n'y a pas de changement, retourne nil. (L'array ne contient pas de sous-array.)
33array.frozen?
Si array Si l'array est gelé (ou temporairement gelé lors de l'ordonnancement), retourne true.
34array.hash
Calculer le code hash de l'array. Deux tableaux avec le même contenu auront le même code hash.
35array.include?(obj)
Si self contient objRetourne true si obj est inclus, sinon retourne false.
36array.index(obj)
retourne self le premier objet égal à obj index. Si le correspondant n'est pas trouvé, retourne nil
37array.indexes(i1, i2, ... iN) [ou]
array.indices(i1, i2, ... iN)

Cette méthode a été obsolète dans la dernière version de Ruby, donc utilisez Array#values_at.
38array.indices(i1, i2, ... iN) [ou]
array.indexes(i1, i2, ... iN)

Cette méthode a été obsolète dans la dernière version de Ruby, donc utilisez Array#values_at.
39array.insert(index, obj...)
Dans la zone donnée index Insérer la valeur donnée avant l'élément donné, l'index peut être négatif.
40array.inspect
Crée une version imprimable du tableau.
41array.join(sep=$,)
Retourne une chaîne de caractères en convertissant chaque élément du tableau en une chaîne de caractères, en utilisant sep séparés pour créer.
42array.last [ou] array.last(n)
retourne self Le dernier élément devideretourne nil
43Si
retourne self array.length
44Le nombre d'éléments du tableau. Cela peut être nul.
array.map { |item| block } [ou]

array.collect! { |item| block } self de appelle chaque élémentarray.collect { |item| block }
45Crée un nouveau tableau contenant les valeurs retournées par block.
array.map! { |item| block } [ou]

array.collect! { |item| block } array de appelle chaque élémentet remplace l'élément par la valeur retournée par block. block
46array.nitems
retourne self de non-Le nombre d'éléments nil. Cela peut être nul.
47array.pack(aTemplateString)
Selon les instructions de aTemplateString, comprime le contenu du tableau en une séquence binaire. Les instructions A, a et Z peuvent être suivies d'un nombre indiquant la largeur du champ de résultat. Les autres instructions peuvent également avoir un nombre indiquant le nombre d'éléments à convertir. Si le nombre est une étoile (*),tous les éléments restants du tableau seront convertis. Un trait de soulignement (_) peut suivre n'importe quelle instruction, ce qui indique que le type spécifié utilise la taille locale du platforme de bas niveau, sinon il utilise une taille cohérente indépendante du platforme. Les espaces dans les chaînes de caractères de modèle sont ignorés.
48array.pop
de array Supprime le dernier élément du milieu, et retourne cet élément. Si array Retourne sans rien si vide nil
49array.push(obj, ...)
Ajoute l'obj fourni à la fin du tableau. Cette expression retourne le tableau lui-même, donc plusieurs ajouts peuvent être faits en une seule fois.
50array.rassoc(key)
Recherche un tableau whose éléments sont aussi des tableaux, en utilisant == pour key Compare chaque deuxième élément des tableaux contenus. Si une correspondance est trouvée, retourne le premier tableau contenant.
51array.reject { |item| block }
Retourne un nouveau tableau contenant les éléments du tableau pour lesquels block n'est pas vrai.
52array.reject! { |item| block }
Lorsque block est vrai, à partir de array Supprime un élément, et retourne sans changement si rien n'a été modifié. nilÉquivalent à Array#delete_if.
53array.replace(other_array)
Inverser array le contenu est remplacé par other_array le contenu, nécessairement tronqué ou étendu.
54array.reverse
Retourne un nouveau array contenant les éléments de l'array inversés.
55array.reverse!
Inverser array Inverser.
56array.reverse_each {|item| block }
Comme Array#each, mais avec array Inverser.
57array.rindex(obj)
Retourne l'index de l'objet égal à obj dans array. Si le correspondant n'est pas trouvé, retourne nil
58array.select {|item| block }
Appel le block transmis en continu de l'array, retourne un array contenant les valeurs retournées par le block. true lorsque l'élément a la valeur spécifiée. Retourne
59array.shift
retourne self le premier élément de l'array, et retire cet élément (tous les autres éléments descendent d'une place). Si l'array est vide, retourne nil
60array.size
retourne array la longueur (le nombre d'éléments). Alias de length.
61array.slice(index) [ou] array.slice(début, longueur) [ou]
array.slice(range) [ou] array[index] [ou]
array[début, longueur] [ou] array[range]

Retourne l'index de index des éléments, ou retourne à partir de début de début jusqu'à length un sous-array de n éléments, ou retourne range le sous-array spécifié. Un index négatif commence à compter de la fin de l'array (-1 est le dernier élément). Si index(ou l'index de départ)Hors de portée, retourne nil
62array.slice!(index) [ou] array.slice!(début, longueur) [ou]
array.slice!(range)

supprimer index(la longueur est optionnelle)ou range l'élément spécifié. Retourne l'objet supprimé, le sous-array, si index Hors de portée, retourne nil
63array.sort [ou] array.sort { | a,b | block }
Retourne un array trié.
64array.sort! [ou] array.sort! { | a,b | block }
Trie l'array.
65array.to_a
retourne self。Si dans Array Appelé sur la sous-classe, le paramètre reçu est converti en objet Array.
66array.to_ary
retourne self.
67array.to_s
retourne self.join.
68array.transpose
hypothèse que self est un tableau de tableaux, et inverser les lignes et les colonnes.
69array.uniq
retourne un nouveau tableau, enlevant array des valeurs répétées dans
70array.uniq!
de self supprimer les éléments répétés. Si il n'y a pas de changement (c'est-à-dire, non trouvé répété), alors retourne nil
71array.unshift(obj, ...)
mettre l'objet en tête du tableau, et déplacer les autres éléments d'un rang.
72array.values_at(selector,...)
retourne un tableau contenant self avec les éléments correspondants aux selector(un ou plusieurs) éléments correspondants. Le sélecteur peut être un index ou une plage.
73array.zip(arg, ...) [ou]
array.zip(arg, ...){ | arr | block }

convertir n'importe quel paramètre en tableau, puis array les éléments avec chaque élément correspondant de chaque paramètre fusionnés.

Instructions pack de l'array

Le tableau suivant liste les instructions de compression de la méthode Array#pack.

instructiondescription
@se déplacer à une position absolue.
Achaîne ASCII (remplie de space, count est la largeur).
achaîne ASCII (remplie de null, count est la largeur).
Bchaîne de bits (décroissant)
bchaîne de bits (croissant).
Cunsigned character.
ccaractère.
D, dnombre flottant à virgule double, format natif.
Enombre flottant à virgule double, little-Ordre des octets endian
enombre flottant à virgule simple, little-Ordre des octets endian
F, fnombre flottant à virgule simple, format natif.
Gnombre flottant à virgule double, réseau(big-endian) ordre des octets.
gnombre flottant à virgule simple, réseau(big-endian) ordre des octets.
Hchaîne hexadécimale (supérieur en priorité).
hchaîne hexadécimale (inférieur en priorité).
Iunsigned integer.
ientier.
Lunsigned long.
lLong.
Mréférence les caractères imprimables, codage MIME.
mBase64 编码e chaine.
NLong, réseau(big-endian) ordre des octets.
nShort, réseau(big-endian) ordre des octets.
Ppointe vers une structure (chaîne de caractères de longueur fixe).
ppointe vers une chaîne de caractères terminée par un zéro.
Q, q64 de numéros de bits.
Sunsigned short.
sCourte.
UUTF-8。
uChaîne codée UU
VLong, little-Ordre des octets endian
vShort, little-Ordre des octets endian
wEntier compressé BER \fnm
XPasser un octet en arrière
xOctet null
ZComme a, mais null sera ajouté *。

Exemple en ligne

Essayez l'exemple suivant pour compresser divers types de données.

Exemple en ligne

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"

Les résultats de l'exemple ci-dessus sont les suivants :

a  b  c
abc
ABC