Elixir:根据索引从列表中选择多个元素

Posted

技术标签:

【中文标题】Elixir:根据索引从列表中选择多个元素【英文标题】:Elixir: Select mupliple elements from a list based on index 【发布时间】:2018-12-23 00:38:34 【问题描述】:

假设我有一个列表,是否有内置的运算符或函数可以根据索引列表选择元素?

例如,像这样的运算符["a", "b", "z"] = alphabet[0, 1, 25]

一个简单的实现可能是:

def select(list, indices) do
  Enum.map(indices, &(Enum.at(list, &1)))
end

如果它不存在,这是为了避免列表被视为数组而故意遗漏吗?

我正在尝试的一个例子让我想要这个,以防我问错问题:给定一个列表,我想选择第一个、中间和最后一个元素,然后计算三。我在做length(list) 来计算长度,然后我想用这个运算符/函数来选择我感兴趣的三个元素。

【问题讨论】:

【参考方案1】:

据我所知,内置运算符不存在。每次我必须获取列表中的几个元素时,我都会使用与您相同的实现。它非常简短且易于重新创建,我怀疑这就是 elixir 中没有现成解决方案的原因。

我能想到的另一个原因是,正如您所指出的,列表不是数组这一事实:当您想要访问一个元素时,您必须访问它之前的所有元素,因此通过一个列表访问元素index 不是一个相关的函数,因为 list 没有被优化为以这种方式使用。

我仍然经常使用索引列表访问元素列表,这意味着我可能没有正确使用 elixir。

【讨论】:

以上是关于Elixir:根据索引从列表中选择多个元素的主要内容,如果未能解决你的问题,请参考以下文章

为啥元组在 Elixir 中不可枚举?

如何从 Erlang/Elixir 中的 ets 集中选择一个随机元素?

从相同索引的列表元素中选择随机整数并生成列表

列表和元组

从列表中选择多个元素

RedisRedis 列表 List 操作 ( 查询操作 | 根据下标获取元素 | 获取列表长度 | 增操作 | 插入值 | 删操作 | 移除值 | 修改操作 | 设置列表指定索引的值 )