为什么Elixir在标准库中有这么多相似的列表类型?

bri*_*tar 2 types list elixir

我正在做Elixir koans,而且我已经完成了五种不同的列表数据类型:

  • 名单
  • 字符列表
  • 词汇表
  • 元组
  • 关键字列表
  • 地图
  • 地图集
  • 结构

其中一些我买,但所有这些同时?有没有人真正将所有这些列表用于严格分开的目的?

mic*_*ala 8

简短的回答是:是的.

答案很长:

  • 列表 - 是您在任何地方使用的基本数据结构.列表是有序的,并允许重复.主要用例是:同质的变长集合
  • 查询列表 - Elixir使用字符串(基于二进制文件),Erlang通常使用字符串(整数代码点列表).它主要是兼容性界面;
  • 单词列表 - 我从未听说过那些;
  • 元组 - 是您在任何地方使用的另一种基本数据结构.主要用例是:异构固定长度集合;
  • 关键字列表 - 非常常见,主要用于选项.它是列表和元组(两元素元组列表)之上的简单抽象.允许重复键并维护键的顺序,因为它们是有序的模式匹配是非常不切实际的.
  • 地图 - 也很常见.允许在键上轻松进行模式匹配,但不允许重复键,也不进行排序.
  • MapSet - 集是一种基本数据结构 - 一种无序的,唯一的元素集合.
  • 结构 - 是Elixir中多态性的主要机制(通过协议),允许在编译时强制创建更严格的结构.

通过函数式编程选择正确的数据结构来表示数据通常是问题的一半,这就是为什么你会得到这么多不同结构,具有不同特征的原因.每个人都有它的用例,并以不同的方式有用.