Array, Set & Hash
Ordre, unicité, clés : trois boîtes, trois réflexes. À toi de choisir la bonne.
42 secondes · sous-titres Français inclus · 8.4 Mo
Les 7 trucs que tu vas savoir faire
Leçon 3 : les Conteneurs
Regarde la leçon (42 s) : Array, Set, Hash — trois boîtes, trois réflexes, un seul bug quand tu te trompes.
L'ordre, avant tout
`fruits` doit contenir exactement 2 éléments : « pomme » à l'INDEX 0 et « poire » en dernier. L'index part de zéro, toujours.
Les doublons, hors
Convertis `mots` (Array avec doublons) en **Set** : il doit contenir « ruby » et « ia » UNE seule fois chacun — soit size 2.
La mémoire avec des clés
Complète `infos` : clé String « langue » => « ruby » et clé « niveau » => 1 (l'ENTIER, pas une String). Puis lis `infos["langue"]`.
Le triptyque
Trois boîtes, trois réflexes : `file` = ["ann", "bob", "cat"] dans l'ordre · `uniques` = un Set de 1, 1, 2 (size 2) · `scores` = { "bob" => 20 }.
Les boîtes dans la boîte
Compose : `groupe` est un Hash — clé « ruby » => un Array d'AU MOINS 2 prénoms dont « ann », clé « ia » => un Array d'au moins 1 prénom.
Leçon 3 : OK
Sans aide : `inventaire` — un Hash avec clé « boites » => un Set d'AU MOINS 2 noms (chaînes), et clé « total » => le nombre exact de boîtes (pas un chiffre en dur si tu changes le Set).
📄 La feuille de chute
imprime-la, colle-la à ton écran, fais semblant que c'est ton idée📄 Cheat sheet — Array · Set · Hash
Trois boîtes, trois réflexes. Le mauvais choix se paie en bugs.
Le réflexe, une fois pour toutes
| Tu as… | Tu prends | Exemple |
|---|---|---|
| une suite, un ordre qui compte | Array | ["ann", "bob", "cat"] |
| des valeurs uniques | Set | Set.new([1, 1, 2]) # => {1, 2} |
| des noms → des valeurs | Hash | {"bob" => 20} |
Array — l'ordre, avant tout
fruits = ["pomme", "poire"]
fruits[0] # => "pomme" l'index part de ZÉRO. Toujours.
fruits.last # => "poire"
fruits << "figue" # pousse à la FIN (pas au début !)
Piège n°1 : << ajoute en fin — si ta valeur doit être première, réécris le tableau.
Set — les doublons, hors
require "set"
mots = Set.new(["ruby", "ia", "ruby"])
mots.size # => 2 "ruby" vit une seule fois
mots.is_a?(Array) # => false Set ≠ Array
Piège n°1 : mots.uniq te rend un Array sans doublons — pas un Set.
La leçon demande un Set ? C'est Set.new.
Hash — la mémoire avec des clés
infos = { "langue" => "ruby", "niveau" => 1 }
infos["langue"] # => "ruby"
infos[:langue] # => nil :symbole et "chaîne" sont DEUX clés différentes
Piège n°1 : :langue ≠ "langue". Oublie les guillemets, oublie ta valeur — nil, sans crier gare.
Piège n°2 : "1" ≠ 1. Ton niveau == 1 en dépend.
Les boîtes dans la boîte
groupe = { "ruby" => ["ann", "bob"], "ia" => ["cat"] }
groupe["ruby"][0] # => "ann"
Rien d'exotique : une valeur de Hash peut être n'importe quoi — y compris un autre conteneur.
Le réflexe Ruby
list = [] # ordre
uniq = Set.new(list) # uniques (require "set")
table = {} # nommé
À ne plus jamais dire
"un tableau hashé"→ un Hash (le tableau, c'est l'Array)"la liste sans doublons"→ un Set — et oui, ça existe"j'ai trouvé la clé"→ si c'estnil, tu n'as rien trouvé du tout 😉
SlopCourse — du slop au code propre.