Array、Set 与 Hash
顺序、唯一、键:三个盒子,三种本能。轮到你选对那一个。
42 秒 · 含中文字幕 · 8.3 Mo
你会学会的 7 件事
第 3 课:容器
Regarde la leçon (42 s) : Array, Set, Hash — trois boîtes, trois réflexes, un seul bug quand tu te trompes.
顺序优先
`fruits` doit contenir exactement 2 éléments : « pomme » à l'INDEX 0 et « poire » en dernier. L'index part de zéro, toujours.
重复免进
Convertis `mots` (Array avec doublons) en **Set** : il doit contenir « ruby » et « ia » UNE seule fois chacun — soit size 2.
带键的记忆
Complète `infos` : clé String « langue » => « ruby » et clé « niveau » => 1 (l'ENTIER, pas une String). Puis lis `infos["langue"]`.
三件套
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 }.
盒子里的盒子
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.
第 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).
📄 备忘单
打印出来贴显示器上,就当是你自己的主意📄 备忘单 — Array · Set · Hash
三个盒子,三种本能。选错的那个,用 bug 买单。
一次性选对
| 你有…… | 用 | 例子 |
|---|---|---|
| 一串有序的东西 | Array | ["ann", "bob", "cat"] |
| 唯一的值 | Set | Set.new([1, 1, 2]) # => {1, 2} |
| 名字 → 值 | Hash | {"bob" => 20} |
Array — 顺序优先
fruits = ["pomme", "poire"]
fruits[0] # => "pomme" 下标从【零】开始。永远。
fruits.last # => "poire"
fruits << "figue" # 追加到【末尾】(不是开头!)
坑 1: << 加在末尾——如果你的值必须排【第一】,重写这个数组。
Set — 重复免进
require "set"
mots = Set.new(["ruby", "ia", "ruby"])
mots.size # => 2 "ruby" 只活一次
mots.is_a?(Array) # => false Set 不是 Array
坑 1: mots.uniq 给你的是数组去重——不是 Set。
题目要 Set?那就 Set.new。
Hash — 带键的记忆
infos = { "langue" => "ruby", "niveau" => 1 }
infos["langue"] # => "ruby"
infos[:langue] # => nil :符号 和 "字符串" 是两把不同的键
坑 1: :langue ≠ "langue"。忘了引号就忘了值——nil,一声不吭。
坑 2: "1" ≠ 1。你的 niveau == 1 全靠这个。
盒子里的盒子
groupe = { "ruby" => ["ann", "bob"], "ia" => ["cat"] }
groupe["ruby"][0] # => "ann"
一点不稀奇:Hash 的值可以是任何东西——包括另一个容器。
Ruby 本能
list = [] # 顺序
uniq = Set.new(list) # 唯一(require "set")
table = {} # 命名
以后别再说
「一个 hash 的表格」→ Hash(表格是 Array)「去重的列表」→ Set——没错,它存在「我找到键了」→ 如果是nil,你什么也没找到 😉
SlopCourse — 从 slop 到干净的代码。