“Progarmming Elixir Note”的版本间的差异
来自Dennis的知识库
Dennis zhuang(讨论 | 贡献) |
Dennis zhuang(讨论 | 贡献) (→Keyword 模块示例) |
||
第25行: | 第25行: | ||
["Elixir", "Ruby"] | ["Elixir", "Ruby"] | ||
iex(27)> | iex(27)> | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | ===Map === | ||
+ | |||
+ | * 对于已经存在的 key,可以用 | 来更新,但是无法添加新 key: | ||
+ | |||
+ | <pre> | ||
+ | iex(35)> person = %{name: "dennis", height: 1.7} | ||
+ | %{height: 1.7, name: "dennis"} | ||
+ | iex(36)> %{person | name: "green"} | ||
+ | %{height: 1.7, name: "green"} | ||
+ | iex(37)> %{person | age: 32} | ||
+ | ** (KeyError) key :age not found in: %{height: 1.7, name: "dennis"} | ||
+ | (stdlib) :maps.update(:age, 32, %{height: 1.7, name: "dennis"}) | ||
+ | (stdlib) erl_eval.erl:255: anonymous fn/2 in :erl_eval.expr/5 | ||
+ | (stdlib) lists.erl:1262: :lists.foldl/3 | ||
</pre> | </pre> |
2015年10月25日 (日) 09:24的版本
Dictionaries
- 一个项对应多个同个 key: Keyword 模块
- 要求顺序: Keyword 模块
- 使用模式匹配内容:Map
- 需要保存很多项:HashDict,Map 性能较差。
Keyword 模块示例
iex(21)> kw_list = [name: "Dave", likes: "Elixir", likes: "Ruby", where: "Beijing"] [name: "Dave", likes: "Elixir", likes: "Ruby", where: "Beijing"] iex(22)> kw_list[:likes] "Elixir" iex(23)> Dict.get(kw_list, :likes) "Elixir" iex(24)> Keyword.get(kw_list, :likes) "Elixir" iex(25)> Keyword.get_values(kw_list, :likes) ["Elixir", "Ruby"] iex(26)> Keyword.get_values(kw_list, :likes) ["Elixir", "Ruby"] iex(27)>
===Map ===
- 对于已经存在的 key,可以用 | 来更新,但是无法添加新 key:
iex(35)> person = %{name: "dennis", height: 1.7} %{height: 1.7, name: "dennis"} iex(36)> %{person | name: "green"} %{height: 1.7, name: "green"} iex(37)> %{person | age: 32} ** (KeyError) key :age not found in: %{height: 1.7, name: "dennis"} (stdlib) :maps.update(:age, 32, %{height: 1.7, name: "dennis"}) (stdlib) erl_eval.erl:255: anonymous fn/2 in :erl_eval.expr/5 (stdlib) lists.erl:1262: :lists.foldl/3