【Erlang】六、基本數據型別——列表(list)

2020-08-12 20:04:02

列表(list)

1. 概念

列表的作用通常是將相同種類的物體放到一起,比如:
我們去超市買的東西,買了10個蘋果,3個牛奶,1本書
一個商品就是列表中的一個元素,那麼我們用列表來表示一下

> ItemList = [{apple, 10},  {milk, 3}, {book, 1}].

2. 定義

  • [...] 來建立列表
  • 列表中元素可以是任何型別的數據

3. 拼接列表

定義

列表可以通過 [T|H],這種結構來拼接列表,
T:被稱爲表頭(head),表頭可以是任何型別的數據
H:被稱爲表尾(tail),表尾必須是列表

案例解釋

剛剛我們已經去超時買了一些東西,在回家途中,家人說:「回家的時候,順道再買兩瓶可樂一個西瓜

> ItemList1 = [{apple, 10},  {milk, 3}, {book, 1}].
情景1:向列表中加入 一個元素

回家的途中看到路邊有賣西瓜的,買了一個西瓜
先在列表中新增買到的西瓜

> ItemList2 = [{watermelon,1}|ItemList1].
[{watermelon,1},{apple, 10},  {milk, 3}, {book, 1}]

路過小店的時候,又買了兩瓶可樂,再在列表中新增2瓶可樂

> ItemList3 = [{coke,2}|ItemList2].
[{coke,2}, {watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}]
情景2:向列表中加入 多個元素

回家的途中路邊沒有賣西瓜的,但是去小店中買可樂的時候,發現有西瓜,所以我們直接在商店裏一次買了1個西瓜、2瓶可樂

> ItemList2 = [[{watermelon,1},{coke,2}]|ItemList1].
[{coke,2}, {watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}]

4. 提取列表元素

定義

提取時,同樣用到了拼接列表 [T|H] 的概念,然後通過 模式匹配 把裏邊的數據到變數中

案例解釋

現在我們買完東西到家了,把東西從一個大袋子裡往出拿

> ItemList1 = [{coke,2}, {watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}].
[{coke,2}, {watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}]

案例1:每次提取一個數據

> [Item1|ItemList2] = ItemList1.
[{coke,2}, {watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}]
> Item1.
{coke,2}
> ItemList2.
[{watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}]

[Item1|ItemList2] 我們拼接了一個列表,與已買物品列表進行拼配,因爲Item1ItemList2 是兩個未賦值的變數,所以等式成立
Item1 則我們第一個取出的物品
ItemList2 則是取出了一個物品後,剩餘的東西

同理,取剩下的物品時,也是一樣的方法

> [Item2|ItemList3] = ItemList2.
[{watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}]
> [Item3|ItemList4] = ItemList3.
[{apple, 10},  {milk, 3}, {book, 1}]
...

案例2:每次提取多個數據

假設我們每次從袋子裏邊拿出兩種或更多物品

> ItemList1 = [{coke,2}, {watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}].
[{coke,2}, {watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}]
> [Item1,Item2|ItemList2].
[{coke,2}, {watermelon,1}, {apple, 10},  {milk, 3}, {book, 1}]
> Item1.
{coke,2} 
> Item2.
{watermelon,1}
> ItemList2.
[{apple, 10},  {milk, 3}, {book, 1}]

有了上面的基礎,肯定能理解了。至於如何怎麼取出剩餘的物品,和上面同理