如何将计算值添加到管道内的地图?

时间:2016-01-28 14:26:06

标签: elixir

我有这种情况。我从ftp服务器收集文件。 例如一个示例文件
41199999
32355830个
00003800
484E0040
48096E40
479E9B80
471B3F00
470A2100
431F0000
30305332个
00003000
00003432 ...

每个文件中的每一行都将使用转换公式进行转换 每一行都将转换为地图中的键。所以我将%{“ax”=> value}设为x行数并为转换后的值赋值。

除此之外,我需要更多的密钥,计算密钥,基于已经从每个文件中读取的密钥,所以在我的代码中

我已经得到了这样的地图

sudo apt-get install libssl-dev

在下一个代码

中的Enum.at(0)行
%{"a1"=>1,"a2"=>2, etc}

然后我的问题是如何将计算的密钥添加到地图。 我有一个f1函数,它接受一个映射并计算f1键

|>Enum.map(&Tools.processFile(pid,&1,conversion))
|>Enum.at(0)

如何在上面的管道代码中将f1键添加到地图中,以便我得到

%{“a1”=> 1,“a2”=> 2,“f1”=> 3}

此致

1 个答案:

答案 0 :(得分:4)

如果我理解这一点,您应该定义f1函数,以便将值附加到现有地图,而不是只返回新值。您可以使用Map.put/3

def f1(map) do
  new_value = map["a1"] + 2
  Map.put(map, "f1", new_value)
end

然后你可以将它添加到管道的末尾:

# ...
|> Enum.map(&Tools.processFile(pid,&1,conversion))
|> Enum.at(0)
|> f1