Ruby Tableaux

Les tableaux Ruby sont des collections ordonnées, indexées par des entiers, de n'importe quel objet. Chaque élément d'un tableau est associé à un indice et est accessible via cet indice.

L'indexation des tableaux commence à 0, comme en C ou en Java. Un indice négatif est compté à partir de la fin du tableau. C'est-à-dire qu'un indice de -1 indique le dernier élément du tableau, -2 indique l'avant-dernier élément, et ainsi de suite.

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

Les tableaux Ruby n'ont pas besoin de spécifier une taille. Lorsque des éléments sont ajoutés à un tableau, les tableaux Ruby grandissent automatiquement.

Création de tableaux

Il existe plusieurs façons de créer ou d'initialiser un tableau. L'une d'elles consiste à utiliser la méthode de classenew:

names = Array.new

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

names = Array.new(20)

Le tableaunamesa une taille ou une longueur de 20 éléments. Vous pouvez utiliser la méthode size ou length pour renvoyer la taille du tableau :

Exemple

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

Essayez-le »

La sortie de l'exemple ci-dessus est :

20
20

Vous pouvez affecter des valeurs à chaque élément du tableau, comme indiqué ci-dessous :

Exemple

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

Essayez-le »

La sortie de l'exemple ci-dessus est :

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

Vous pouvez également utiliser un bloc avec new, en remplissant chaque élément avec le résultat du calcul du bloc :

Exemple

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

Essayez-le »

La sortie de l'exemple ci-dessus est :

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

Il existe également une autre méthode pour les tableaux, [], comme indiqué ci-dessous :

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

Une autre forme de création de tableau est la suivante :

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

Dans le module principal de Ruby, il peut y avoir une méthode Array qui ne prend qu’un seul argument. Cette méthode utilise un intervalle comme argument pour créer un tableau numérique :

Exemple

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

La sortie de l'exemple ci-dessus est :

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

Méthodes intégrées d’Array

Nous avons besoin d’une instance d’un objet Array pour appeler les méthodes d’Array. Voici comment créer une instance d’un objet Array :

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

Cela renvoie un nouveau tableau rempli avec les objets donnés. Maintenant, en utilisant l’objet créé, nous pouvons appeler n’importe quelle méthode disponible. Par exemple :

Exemple

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

La sortie de l'exemple ci-dessus est :

6

Les méthodes de tableau publiques suivantes (en supposant quearrayest un objet Array) :

Non.Metode & Deskripsi
1array & other_array
Renvoie un nouveau tableau contenant les éléments communs aux deux tableaux, sans doublons.
2array * int [ou] array * str
Renvoie un nouveau tableau créé en concaténant int copies de self. Avec un argument String, équivalent à self.join(str).
3array + other_array
Renvoie un nouveau tableau créé en concaténant deux tableaux pour produire un troisième tableau.
4array - other_array
Renvoie un nouveau tableau qui est une copie du tableau d'origine avec les éléments apparaissant dans other_array supprimés.
5str <=> other_str
Compare str avec other_str, en renvoyant -1 (inférieur), 0 (égal) ou 1 (supérieur). La comparaison est sensible à la casse.
6array | other_array
Renvoie un nouveau tableau en ajoutant other_array au tableau et en supprimant les doublons.
7array << obj
Ajoute l'objet donné à la fin du tableau. L'expression renvoie le tableau lui-même, de sorte que plusieurs ajouts peuvent être enchaînés ensemble.
8array <=> other_array
Renvoie un entier (-1, 0 ou +1) si le tableau est inférieur, égal ou supérieur à other_array.
9array == other_array
Deux tableaux sont égaux s'ils contiennent le même nombre d'éléments et que chaque élément est égal à l'élément correspondant dans l'autre tableau (selon Object.==).
10array[index] [ou] array[start, length] [ou]
array[range] [ou] array.slice(index) [ou]
array.slice(start, length) [ou] array.slice(range)

Renvoie l'élément à l'indexindex, ou renvoie le sous-tableau à partir de startstartjusqu'à lengthlengthéléments, ou renvoie le sous-tableau spécifié parrange. Les index négatifs comptent à partir de la fin du tableau (-1 est le dernier élément). Si indexindex(ou l'index de départ) est hors limites, renvoienil。
11array[index] = obj [or]
array[start, length] = obj or an_array or nil [or]
array[range] = obj or an_array or nil

Définit l'élément à l'indexindex, ou remplace le sous-tableau à partir de startstartjusqu'à lengthlengthéléments, ou remplace lerangesous-tableau spécifié par range. Si l'indice est supérieur à la capacité actuelle du tableau, le tableau s'agrandit automatiquement. Les indices négatifs comptent à partir de la fin du tableau. Si lengthlengthest zéro, des éléments sont insérés. Si rangenilest utilisé dans la deuxième ou troisième forme, puis à partir deselfsupprimer des éléments.
12array.abbrev(pattern = nil)
isselfLes chaînes qu'il contient calculent un ensemble d'abréviations explicite. Si un motif ou une chaîne est transmis, seuls les cas où la chaîne correspond au motif ou commence par la chaîne sont pris en compte.
13array.assoc(obj)
Recherche dans un tableau dont les éléments sont également des tableaux, en utilisant obj.== pour comparer obj avec le premier élément de chaque tableau contenu. Si une correspondance est trouvée, renvoie le premier tableau contenu ; si aucune correspondance n'est trouvée, renvoienil。
14array.at(index)
Renvoie l'élément à l'index. Un index négatif compte à partir de laselffin du tableau. Renvoie nil si l'index est hors limites.
15array.clear
Supprime tous les éléments du tableau.
16array.collect { |item| block } [ou]
array.map { |item| block }

estselfAppelle le bloc une fois pour chaque élément deblock. Crée un nouveau tableau contenant les valeurs renvoyées par le bloc.
17array.collect! { |item| block } [ou]
array.map! { |item| block }

estselfAppelle le bloc une fois pour chaque élément deblock, en remplaçant l'élément parblockla valeur renvoyée par le bloc.
18array.compact
Renvoie une copie deselfavec tous lesniléléments supprimés.
19array.compact!
Supprime tous lesniléléments du tableau. S'il n'y a aucun changement, renvoienil。
20array.concat(other_array)
Ajoute les éléments de other_array àself.
21array.delete(obj) [ou]
array.delete(obj) { block }

deselfSupprime du tableau l'élément égal àobjobj. Si aucun élément égal n'est trouvé, renvoienil. Si aucun élément égal n'est trouvé et qu'un code optionnelblockest fourni, renvoieblockle résultat du bloc.
22array.delete_at(index)
Supprime l'élément à l'index spécifiéindexindex et renvoie cet élément. Si l'index est hors limites, renvoienil。
23array.delete_if { |item| block }
Lorsqueblocklorsqu'il est vrai, supprime deselfchaque élément du tableau.
24array.each { |item| block }
estselfAppelle le bloc une fois pour chaque élément dansblock, en passant l'élément comme argument.
25array.each_index { |index| block }
Identique à Array#each, mais passe l'indexindex de l'élément au lieu de l'élément lui-même.
26array.empty?
Renvoie true si le tableau lui-même ne contient aucun élément.
27array.eql?(other)
Renvoie true siarrayetothersont le même objet, ou si les deux tableaux ont le même contenu.
28array.fetch(index) [ou]
array.fetch(index, default) [ou]
array.fetch(index) { |index| block }

Tente de renvoyer l’élément à la positionindex. Siindexest en dehors du tableau, la première forme lève uneIndexErrorexception, la deuxième forme renvoiedefault, et la troisième forme renvoie le résultat de l’appel deblockle bloc avecindexl’index comme argument. Lesindexnégatifs comptent à partir de la fin du tableau.
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éfinissentselfles éléments sélectionnés de self àobjobj. Unnille début de nil équivaut à zéro.nilLa longueur de nil est équivalente àself.lengthla longueur de self. Les trois dernières formes utilisent la valeur du bloc pour remplirletableau.blocLe bloc reçoit l'index absolu de chaque élément en cours de remplissage.
30array.first [ou]
array.first(n)

Renvoie le premier élément ou les premiersnéléments. Si le tableau est vide, la première forme renvoienil, et la seconde forme renvoie un tableau vide.
31array.flatten
Renvoie un nouveau tableau qui est un tableau aplati unidimensionnel (récursivement).
32array.flatten!
holdarrayEffectue un aplatissement. Si aucun changement n'est effectué, renvoienil. (Le tableau ne contient pas de sous-tableaux.)
33array.frozen?
Renvoie true siarrayest gelé (ou temporairement gelé pendant le tri).
34array.hash
Calcule le code de hachage pour le tableau. Deux tableaux avec le même contenu auront le même code de hachage.
35array.include?(obj)
Renvoie true siselfcontientobj, puis renvoie true, sinon false.
36array.index(obj)
Renvoie l'selfindex du premier objet égal à obj dansindex. Si aucune correspondance n'est trouvée, renvoienil。
37array.indexes(i1, i2, ... iN) [ou]
array.indices(i1, i2, ... iN)

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

Cette méthode est obsolète dans la dernière version de Ruby, veuillez donc utiliser Array#values_at.
39array.insert(index, obj...)
à l'indexindex donné, insérez la valeur donnée avant l'élément ; l'index peut être négatif.
40array.inspect
Crée une version imprimable d'un tableau.
41array.join(sep=$,)
Renvoie une chaîne créée en convertissant chaque élément du tableau en chaîne et en utilisantsepcomme séparateur pour les joindre.
42array.last [ou] array.last(n)
Renvoie le dernier élément deself. Si le tableau estvide, la première forme renvoienil。
43array.length
Renvoie le nombre d'éléments dansself. Peut être zéro.
44array.map { |item| block } [ou]
array.collect { |item| block }

estselfappelé une fois pour chaque élément deblock. Crée un nouveau tableau contenant les valeurs renvoyées par le bloc.
45array.map! { |item| block } [ou]
array.collect! { |item| block }

estarrayappelé une fois pour chaque élément deblock, remplaçant l'élément par la valeur renvoyée par le bloc.
46array.nitems
Renvoie le nombre d'éléments non nil dansself. Peut être zéro.
47array.pack(aTemplateString)
Empaquette le contenu du tableau dans une séquence binaire selon les directives dans aTemplateString. Les directives A, a et Z peuvent être suivies d'un nombre indiquant la largeur du champ résultant. Les directives restantes peuvent également prendre un nombre indiquant le nombre d'éléments du tableau à convertir. Si le nombre est un astérisque (*), tous les éléments restants du tableau seront convertis. Toute directive peut être suivie d'un trait de soulignement (_) pour indiquer que le type spécifié utilise la taille native de la plateforme sous-jacente ; sinon, il utilise une taille cohérente indépendante de la plateforme. Les espaces sont ignorés dans la chaîne de modèle.
48array.pop
Supprime le dernier élément dearrayet le renvoie. Siarrayest vide, renvoienil。
49array.push(obj, ...)
Ajoute l'obj donné à la fin du tableau. L'expression renvoie le tableau lui-même, ainsi plusieurs ajouts peuvent être enchaînés.
50array.rassoc(key)
Recherche un tableau dont les éléments sont aussi des tableaux, en utilisant == pour comparerkeyavec le deuxième élément de chaque tableau contenu. Si une correspondance est trouvée, renvoie le premier tableau contenu.
51array.reject { |item| block }
Renvoie un nouveau tableau contenant les éléments du tableau pour lesquels le bloc n'est pas vrai.
52array.reject! { |item| block }
Lorsque le bloc est vrai, supprime les éléments dearray. Si aucun changement n'a lieu, renvoienil. Équivalent à Array#delete_if.
53array.replace(other_array)
holdarrayRemplace le contenu de par le contenu deother_array, en tronquant ou en développant si nécessaire.
54array.reverse
Renvoie un nouveau tableau contenant les éléments du tableau dans l'ordre inverse.
55array.reverse!
holdarrayInverse son contenu.
56array.reverse_each {|item| block }
Identique à Array#each, maisarrayparcourt dans l'ordre inverse.
57array.rindex(obj)
Renvoie l'index du dernier objet du tableau égal à obj. Si aucune correspondance n'est trouvée, renvoienil。
58array.select {|item| block }
Appelle le bloc avec les éléments consécutifs du tableau ; renvoie un tableau contenant les éléments pour lesquels le bloc renvoietrueune valeur vraie.
59array.shift
Renvoie le premier élément deselfet le supprime (décalant tous les autres éléments d'un cran). Si le tableau est vide, renvoienil。
60array.size
Renvoie la longueur dearray(le nombre d'éléments). Alias pour length.
61array.slice(index) [ou] array.slice(start, length) [ou]
array.slice(range) [ou] array[index] [ou]
array[start, length] [ou] array[range]

Renvoie l'élément à l'indexindex, ou renvoie un sous-tableau commençant àstartet continuant surlengthéléments, ou renvoie le sous-tableau spécifié parrange. Les indices négatifs comptent à partir de la fin du tableau (-1 est le dernier élément). Siindex(ou l'index de début) est hors limites, renvoienil。
62array.slice!(index) [ou] array.slice!(start, length) [ou]
array.slice!(range)

Supprimeindex(la longueur est facultative) ourangele(s) élément(s) spécifié(s) par. Renvoie l'objet supprimé, le sous-tableau, ou siindexest hors limites, renvoienil。
63array.sort [or] array.sort { | a,b | block }
Renvoie un tableau trié.
64array.sort! [or] array.sort! { | a,b | block }
Trie le tableau.
65array.to_a
Renvoieself. Si appelé surArrayune sous-classe de, convertit le récepteur en un objet Array.
66array.to_ary
Renvoie self.
67array.to_s
Renvoie self.join.
68array.transpose
Suppose que self est un tableau de tableaux et transpose les lignes et les colonnes.
69array.uniq
Renvoie un nouveau tableau avec les valeurs dupliquées supprimées dearray.
70array.uniq!
Supprime les éléments dupliqués deself. S'il n'y a pas de changement (c'est-à-dire qu'aucun doublon n'est trouvé), renvoienil。
71array.unshift(obj, ...)
Ajoute l'objet au début du tableau, en décalant les autres éléments d'une position.
72array.values_at(selector,...)
Renvoie un tableau contenant les éléments de self correspondant auselectorsélecteur(s) donné(s). Les sélecteurs peuvent être des indices entiers ou des plages.
73array.zip(arg, ...) [ou]
array.zip(arg, ...){ | arr | block }

Convertit tous les arguments en tableaux, puis fusionne les éléments dearrayavec les éléments correspondants de chaque argument.

Directives de pack d'Array

Le tableau suivant liste les directives de pack pour la méthode Array#pack.

DirectiveDescription
@Se déplace à la position absolue.
AChaîne ASCII (complétée par des espaces, le nombre correspond à la largeur).
aChaîne ASCII (complétée par des caractères nuls, le nombre correspond à la largeur).
BChaîne de bits (ordre des bits décroissant)
bChaîne de bits (ordre des bits croissant).
CCaractère non signé.
cCaractère.
D, dFlottant à double précision, format natif.
EFlottant double précision, ordre des octets little-endian.
eFlottant simple précision, ordre des octets little-endian.
F, fFlottant simple précision, format natif.
GFlottant double précision, ordre des octets réseau (big-endian).
gFlottant simple précision, ordre des octets réseau (big-endian).
HChaîne hexadécimale (quartet de poids fort en premier).
hChaîne hexadécimale (quartet de poids faible en premier).
IEntier non signé.
iEntier.
LLong non signé.
lLong.
MQuoted printable, encodage MIME.
mChaîne encodée en Base64.
NLong, ordre des octets réseau (big-endian).
nShort, ordre des octets réseau (big-endian).
PPointeur vers une structure (chaîne de longueur fixe).
pPointeur vers une chaîne terminée par un caractère nul.
Q, qNombre de 64 bits.
SShort non signé.
sShort.
UUTF-8.
uChaîne encodée en UU.
VLong, ordre des octets little-endian.
vShort, ordre des octets little-endian.
wEntier compressé BER \fnm.
XRecule d'un octet.
xOctet nul.
ZIdentique à a, sauf qu'un octet nul est ajouté avec *.

Exemple

Essayez l'exemple suivant, qui empaquette diverses données.

Exemple

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"

La sortie de l'exemple ci-dessus est :

a  b  c
abc
ABC
Autres extensions