第 3 课 · Découverte

Array、Set 与 Hash

顺序、唯一、键:三个盒子,三种本能。轮到你选对那一个。

~11 min7 个关卡
▶ 视频🧩 练习📄 备忘单

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 Microduck — 从 slop 到干净的代码。