Elixir 作为适用于并行编程的语言,它首先要适用于常规的顺序编程。
本篇文章整理了小部分个人感觉难记的 Elixir 常规编程示例。
关键字列表:
因为我们经常需要一组键值对,Elixir 提供了一个简写方式:
[name: "Dave", city: "Dallas", likes: "Programming"]
Elixir 会将其转换为一个由双值元组组成的列表:
[ {:name, "Dave"}, {:city, "Dallas"}, {:likes, "Programming"}]
当关键字列表作为函数调用的最后一个参数时,Elixir 允许去掉方括号。例如:
DB.save record, use_transaction: true, logging : "HIGH"
散列表:
%{ key => value, key => value }
如果键是原子类型,可以使用类似于关键字列表的简略写法:
%{ key : value, key : value }
为何既有散列表又有关键字列表?
散列表每个条目的键是不同的,而关键字列表允许存在重复的键。散列表更高效(尤其其条目数量不断增加时),并且可以用于 Elixir 的模式匹配。
通常我们用关键字列表来处理命令行参数和传递选项,而想获得关联数组的时候就用散列表(或另一个数据结构,HashDict)。
访问散列表:
iex> states = %{ "AL" => "Alabama", "WI" => "Wisconsin" }
%{"AL" => "Alabama", "WI" => "Wisconsin"}
iex> states["AL"]
"Alabama"
iex> states["TX"]
nil
如果键是原子,还可以用点符号:
iex> colors = %{ red: 0xff0000, green: 0x00ff00, blue: 0x0000ff}
%{blue: 255, green: 65280, red: 16711680}
iex> colors[:red]
16711680
iex> colors.green
65280
散列字典
如何在散列表、散列字典和关键字列表之间做选择:
问自己如下的问题(按顺序):
- 需要将多个条目对应同一个键么?
如果是,那么需要使用 Keyword 模块。 - 需要保证元素的次序么?
如果还是,则选择 Keyword 模块。 - 需要对内容进行模式匹配么?
如果是则使用散列表。 - 需要存储数百个条目么?
如果是,使用 HashDict。
网友评论