gpt4 book ai didi

elixir - 将文件解析为嵌套字典

转载 作者:行者123 更新时间:2023-12-02 09:17:49 27 4
gpt4 key购买 nike

我有一个配置文件,我想使用以下格式读取

[key_1]
inner_key_1 inner_entry_1
inner_key_2 inner_entry_2
inner_key_3 inner_entry_3
inner_key_4 inner_entry_4
[key_2]
inner_key_5 inner_entry_5
inner_key_6 inner_entry_6
inner_key_7 inner_entry_7
inner_key_8 inner_entry_8

然后它将被映射到像这样的嵌套 Elixir 字典中。

%{key_1 => %{inner_key_1 => inner_entry_1, ... }, key_2 => %{inner_key_5 => inner_entry_5,...}}

我很难概念化如何使用 Elixir 和函数式编程来做到这一点。我曾尝试使用 Stream 库来实现这一目标,但没有成功。

最佳答案

一个简单的解决方案可能类似于:

def read_config(file) do
file
|> File.stream!()
|> Stream.map(&String.trim/1)
|> Enum.reduce({%{}, nil}, &read_config/2)
|> elem(0)
end

defp read_config("[" <> key, {acc, _top_key}) do
key = String.trim_trailing(key, "]")
{Map.put(acc, key, %{}), key}
end
defp read_config(key_value, {acc, top_key}) do
[key, value] = String.split(key_value, " ")
{put_in(acc, [top_key, key], value), top_key}
end

将命令式循环转换为函数式风格时,您最常使用reduce。下一步是确定每次迭代期间所需的所有状态 - 在这种情况下,我们需要“到目前为止的结果”和当前的顶级 key - 这类似于您在命令式解决方案中使用的内容循环外的可变变量。

关于elixir - 将文件解析为嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260845/

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