Les Tableaux et Hash

Voir la vidéo
Description Sommaire

Jusqu'à maintenant on a réussi à écrire quelques algorithmes en utilisant les types primaires. Malheureusement on arrive très rapidement à des cas un petit peu plus complexe où on a besoin de stocker des informations plus évoluées comme par exemple une liste. Pour stocker une liste de valeurs on va faire appel à des tableaux.Ces tableaux permettent de stocker une liste de valeurs de différent type et s'écrivent de la manière suivante :

array = [1, 5, 8, 'chaine', true, false]

Chaque élément du tableau est accessible à travers ce que l'on appelle un index. L'index est une valeur chiffrée qui permet de représenter la position d'un élément dans le tableau. Cette valeur commence par 0 (0 permettant de récupérer le premier élément du tableau, 1 le second élément et ainsi de suite). Dans notre cas si on souhaite récupérer la chaîne de caractères il faudra donc utiliser l'index 3.

array[3] # "chaine"

Les tableaux peuvent être combinés, c'est-à-dire que l'on peut stocker dans un tableau un autre tableau et ainsi de suite.

eleves = [['marc', 'andre', 'Jean'], ['Charlène', 'François']]
eleves[0][0] # Récupèrera 'marc'

Ces tableaux sont alors appelés les tableaux multidimensionnels.

Les Hash

Les tableaux sont pratiques pour stocker une liste d'éléments, mais s'avèrent relativement limités lorsque l'on doit sauvegarder des informations plus complexes. On aura alors accès un nouveau type de variable, les Hash. Ces variables sont des sortes de tableaux auquel on pourrait spécifier un index particulier.

eleve = { 
"nom" => "marc",
"age' => 23,
"note" => 12
}
eleve["nom"] # marc

Les Hash sont l'équivalent de ce que l'on appelle des objets en JavaScript (ou les tableaux associatifs en PHP). Ils nous permettent de stocker des informations complexes avec une notion de clés (ici nom âge ou note) et de valeurs.

Si on essaie d'accéder à une clé qui n'existe pas Ruby nous renverra alors la valeur nil (null dans d'autres langages de programmation, cela veut dire "rien")

eleve["taille"] # nil

Il est aussi possible de créer Hash en utilisant le constructeur. On pourra leur préciser en paramètre une valeur qui servira de valeur par défaut si une clé n'existe pas.

eleve = Hash.new("trololol")
eleve["taille"] # "trololol"

Enfin, tout comme les tableaux les Hash peuvent être multidimensionnels (on peut avoir un Hash de Hash).

Les symboles

En Ruby on peut utiliser des chaînes de caractères pour les clés de nos Hash mais on peut aussi travailler avec les symboles. À première vue un symbole peut ressembler à une chaîne de caractères. Mais au niveau interne ce sont deux éléments qui sont complètement différents. Il peut y avoir plusieurs chaînes de caractères différentes qui ont la même valeur alors qu'il ne peut pas y avoir plusieurs symboles de même valeur.

"aa".object_id # 20602940
"aa".object_id # 26887560

Les symboles sont donc plus pertinents dans le cas de clés pour las Hash car ils vont permettre d'utiliser moins de mémoires. En effet, à chaque fois qu'une clé revient si elle est stockée sous forme de chaînes de caractères, Ruby la traite comme une nouvelle valeur alors qu'avec les symboles ce n'est pas le cas. Un symbole s'écrit de la manière suivante

:symbol
# Si on veut convertir un symbol en chaine de caractère
:symbol.to_s # 'symbol'
# Si on veut convertir une chaine en symbole
"chaine".to_sym # :chaine

Attention, contrairement aux chaînes de caractères les symboles ne peuvent pas contenir d'espace de caractères spéciaux. On utilisera alors le _. Comme je vous l'ai dit dans l'explication précédente, on utilisera surtout les symboles pour nos Hash.

eleve = { 
:nom => "marc"
:age => 23
:note => 12
}
eleve[:nom] # marc

Comme je vous l'ai dit lors de l'introduction Ruby possède toujours plusieurs manières de faire la même chose. À partir de la version 1.9 il est possible d'écrire les Hash différemment :

eleve = {
nom: "marc",
age: 23,
note: 12
}

Cette nouvelle syntaxe est très utilisée et vous la retrouverez quasiment tout le temps dans vos scripts. Elle se rapproche beaucoup de ce que l'on connaît en JavaScript notamment.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager