elixir - 合并键,基于键值的值列表
问题描述
我有几个像这样的键值列表
fans = [%{"end_time" => "2021-01-02T08:00:00+0000", "value" => 514210},
%{"end_time" => "2021-01-03T08:00:00+0000", "value" => 513702},
%{"end_time" => "2021-01-04T08:00:00+0000", "value" => 513720},
%{"end_time" => "2021-01-05T08:00:00+0000", "value" => 513775}]
unique_weakly = [ %{"end_time" => "2021-01-02T08:00:00+0000", "value" => 846593},
%{"end_time" => "2021-01-03T08:00:00+0000", "value" => 893488},
%{"end_time" => "2021-01-04T08:00:00+0000", "value" => 1068204},
%{"end_time" => "2021-01-05T08:00:00+0000", "value" => 1197864}]
unique_monthly = [ %{"end_time" => "2021-01-02T08:00:00+0000", "value" => 2660773},
%{"end_time" => "2021-01-03T08:00:00+0000", "value" => 2641936},
%{"end_time" => "2021-01-04T08:00:00+0000", "value" => 2632740},
%{"end_time" => "2021-01-05T08:00:00+0000", "value" => 2632076}]
users_weakly = [ %{"end_time" => "2021-01-02T08:00:00+0000", "value" => 94173},
%{"end_time" => "2021-01-03T08:00:00+0000", "value" => 104654},
%{"end_time" => "2021-01-04T08:00:00+0000", "value" => 127377},
%{"end_time" => "2021-01-05T08:00:00+0000", "value" => 144296}]
我想合并它们end_time
,预期的结果应该是
[%{end_time: "2021-01-02T08:00:00+0000",
fans: 514210,
unique_weakly: 846593,
unique_monthly: 2660773,
users_weakly: 94173},
%{end_time: "2021-01-03T08:00:00+0000",
fans: 513702,
unique_weakly: 893488,
unique_monthly: 2641936,
users_weakly: 104654},
......]
有人可以帮我理解如何做到这一点,谢谢?
解决方案
你可以这样写一个插入函数:
def insert(map, list, key) do
Enum.reduce(list, map, fn %{"end_time" => end_time, "value" => value}, map ->
Map.update(map, end_time, %{"end_time" => end_time, key => value}, &Map.put(&1, key, value))
end)
end
然后像这样使用它:
%{}
|> insert(fans, "fans")
|> insert(unique_weakly, "unique_weakly")
|> insert(unique_monthly, "unique_monthly")
|> insert(users_weakly, "users_weakly")
|> Map.values()
结果:
[
%{
"end_time" => "2021-01-02T08:00:00+0000",
"fans" => 514210,
"unique_monthly" => 2660773,
"unique_weakly" => 846593,
"users_weakly" => 94173
},
%{
"end_time" => "2021-01-03T08:00:00+0000",
"fans" => 513702,
"unique_monthly" => 2641936,
"unique_weakly" => 893488,
"users_weakly" => 104654
},
%{
"end_time" => "2021-01-04T08:00:00+0000",
"fans" => 513720,
"unique_monthly" => 2632740,
"unique_weakly" => 1068204,
"users_weakly" => 127377
},
%{
"end_time" => "2021-01-05T08:00:00+0000",
"fans" => 513775,
"unique_monthly" => 2632076,
"unique_weakly" => 1197864,
"users_weakly" => 144296
}
]
推荐阅读
- android - 如何在 Android 10 中唯一标识 Android 设备
- javascript - GitLab CI 找不到模块错误(当它在 node_modules 中时)
- mysql - 如何在节点js中发送多个响应
- python - 使用 add_loss 时可以提供 loss_weights 吗?
- php - 如何将 strtok 与 unicode 分隔符一起使用?
- javascript - 在后台标题中播放 Youtube
- php - 如何使用 htaccess 文件将旧站点 URL 重定向到新的 Symfony 4 应用程序 URL?
- amazon-web-services - 用户连接到另一个用户作为朋友关系 - AWS GraphQL 转换
- character-encoding - 如何在 BizTalk AS2 接收中使用“引用打印”内容传输编码?
- mysql - 无法获取特定用户组的资产负债表。我该怎么做