gpt4 book ai didi

elixir - 在 Elixir 中使用多个键从 map 中选择多个项目

转载 作者:行者123 更新时间:2023-12-02 07:14:12 25 4
gpt4 key购买 nike

我正在尝试实现 Modbus Elixir 中的协议(protocol)作为学习 Elixir 和加深我对函数式编程的理解的练习。

Modbus 数据被建模为连续的寄存器 block 。 modbus 读取请求采用 的形式。这指示服务器收集从寄存器开始并继续向上的寄存器。例如,如果was 0和was 5,服务器将返回寄存器0、1、2、3和4的值。

我认为用于对这些寄存器进行建模的良好数据结构是一个映射,其中键是寄存器,值是寄存器的值。因此,我很好奇是否有一种惯用的方法可以从给定多个键的映射中检索多个值,而不必迭代键并为每个键调用 get() 。

如果 map 不太合适,我愿意接受其他关于更好的数据模型的建议。

Python有itemgetter在运算符(operator)模块中执行此任务。也许这将为我想要完成的任务提供另一个线索。

最佳答案

Map#take/2会做:

iex(1)> data = %{a: 42, b: 3.14, foo: :bar}
iex(2)> data |> Map.take(~W|a foo|a)
%{a: 42, foo: :bar}

另一方面,您的数据看起来更像 Keyword list :

iex(3)> data = [a: 42, b: 3.14, foo: :bar]
iex(4)> data |> Keyword.take([:a, :foo])
[a: 42, foo: :bar]

您可以选择以上任何一个,甚至可以为您自己的结构提供方便的方法来检索子集。

关于elixir - 在 Elixir 中使用多个键从 map 中选择多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40599790/

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