数组 – 如何通过索引在elixir中获取列表元素

{status, body} = File.read("/etc/hosts")
if status == :ok do
    hosts = String.split body, "\n"
    hosts = Enum.map(hosts, fn(host) -> line_to_host(host) end)
else
    IO.puts "error reading: /etc/hosts"
end

我有以下elixir函数,我读取/ etc / hosts文件,并尝试使用String.split逐行拆分。

然后我通过主机的行列表映射,并为每个主机调用line_to_host(主机)。 line_to_host方法将行分割为“”,然后我想将from和to设置为变量:

def line_to_host(line) do
    data = String.split line, " "
    from = elem(data, 0) // doesn't work
    to = elem(data, 1) // doesn't work either
    %Host{from: from, to: to}
end

我通过stackoverflow,elixir文档和谷歌搜索如何获取一个特定索引的列表元素。
我知道有头/尾,但是必须有更好的获取列表元素的方法。

elem(list,index)完全符合我的需要,但不幸的是它并不适用于String.split。

如何通过ID在elixir中获取list / tuple元素

最佳答案
您可以使用模式匹配:

[from, to] = String.split line, " "

也许你想添加零件:2选项,以确保只有两个部分,以防止在行中有多个空格:

[from, to] = String.split line, " ", parts: 2

还有Enum.at/2,这可以在这里工作,但是是单一的。 Enum.at的问题在于,由于Elixir中的列表实现,它需要遍历整个列表直到所请求的索引,因此对于大型列表来说,它的效率非常低。

编辑:这是Enum.at所需的示例,但在这种情况下我不会使用它

parts = String.split line, " "
from = Enum.at(parts, 0)
to = Enum.at(parts, 1)

转载注明原文:数组 – 如何通过索引在elixir中获取列表元素 - 代码日志