Ruby/Tableaux et hachages
Vous connaissez les variables et les constantes ? Maintenant, place aux tableaux et aux hachages qui vous permettent également de stocker des données.
Les tableaux
modifier
tab = [] # tableau vide
prix = [30, 400, 25, 73] # tableau contenant des entiers
puts prix # affichage de toutes les valeurs du tableau
langues = ["fr", "en"] # tableau de chaînes de caractères
puts langues
mix = 4, "quatre" # tableau mixte
puts mix
Les crochets ne sont pas obligatoires, quel que soit le type des éléments contenus dans le tableau.
Accéder à un élément
modifierChaque élément du tableau est associé à un nombre (un entier naturel) qui représente la case du tableau qu’il occupe ; la première case correspond à l'indice 0. Un exemple pour vous éclairer :
prix[0]
correspond au premier élément du tableau. Ce tableau contient 4 éléments donc 3 est l'indice du dernier élément, désigné par prix[3]
.
Ajouter un élément à un tableau
modifierPour ajouter un élément à la fin de votre tableau, vous pouvez utiliser l'opérateur <<
que vous avez déjà vu pour les chaînes de caractères (dans le chapitre consacré aux opérateurs).
Vous pouvez également vous en servir pour concaténer deux tableaux (les mettre bout à bout) :
t = [4, 7, 3] ; s = [6, 8]
t << s
# => [4, 7, 3, [6, 8]]
# Pour ajouter réellement les valeurs de s à t =
t += s
# => [1, 7, 3, 6, 8]
Les hachages
modifier
La seconde différence essentielle avec les tableaux ordinaires est l’utilisation d'accolades dans la déclaration des éléments à la place de crochets. Les accolades ne sont pas facultatives.
Accéder à un élément
modifierDans le hachage livre
, "Toto"
est associé à la clé "auteur"
, cette valeur est désignée par livre["auteur"]
:
Si on avait eu recours à un tableau, on aurait utilisé livre[1]
pour désigner "Toto"
.
Lorsque les données sont du mêmes type, et qu’elles appartiennent à un même ensemble (par exemple : la suite des nombres premiers jusqu'à 1000, la liste des prénoms de vos amis, etc.), un tableau est plus indiqué. Dans tous les autres cas, un hachage conviendrait mieux.