gpt4 book ai didi

arrays - 如何通过elixir中的索引获取列表元素

转载 作者:行者123 更新时间:2023-12-03 09:10:57 28 4
gpt4 key购买 nike

{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(host) 。 line_to_host 方法通过 " " 分割该行然后我想设置 fromto多变的:
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 文档并在 google 上搜索了如何在特定索引处获取列表元素。
我知道有 head/tail但必须有更好的方法来获取列表元素。
elem(list, index)完全符合我的需要,但不幸的是它不适用于 String.split .

如何在elixir中通过ID获取列表/元组元素

最佳答案

您可以为此使用模式匹配:

[from, to] = String.split line, " "
也许您想添加 parts: 2选项以确保在行中有多个空格的情况下您只会得到两个部分:
[from, to] = String.split line, " ", parts: 2
还有 Enum.at/3 ,这在这里可以正常工作,但很单调。 Enum.at 的问题是由于 Elixir 中的列表实现,它需要遍历整个列表直到请求的索引,因此对于大型列表可能非常低效。

编辑:这是请求的示例,带有 Enum.at ,但我不会在这种情况下使用它
parts = String.split line, " "
from = Enum.at(parts, 0)
to = Enum.at(parts, 1)

关于arrays - 如何通过elixir中的索引获取列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32837195/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com