elixir - Elixir Map - 分组和排序字段
问题描述
在 Elixir 我有这张地图
my_map = [%{ user_id: 1, user_name: "David", gamer_id: 100, gamer_name: "John" },
%{ user_id: 1, user_name: "David", gamer_id: 101, gamer_name: "Bil" },
%{ user_id: 1, user_name: "David", gamer_id: 103, gamer_name: "Ruk" },
%{ user_id: 2, user_name: "Ron", gamer_id: 104, gamer_name: "Sam" },
%{ user_id: 2, user_name: "Ron", gamer_id: 105, gamer_name: "Sean" }]
我想将其转换为以下输出
输出 :
[%{ user_id: 1, username: "David",
games: [
%{
gamer_id: 100,
gamer_name: "John"
},
%{
gamer_id: 101,
gamer_name: "Bil"
},
%{
gamer_id: 103,
gamer_name: "Ruk"
}
]
},
%{ user_id: 2, username: "Ron",
games: [
%{
gamer_id: 104,
gamer_name: "Sam"
},
%{
gamer_id: 105,
gamer_name: "Sean"
}
]
}]
我尝试了 Enum.group_by ,但都无法实现
my_map |> Enum.group_by(fn(x) -> x.user_id end)
任何有关如何实现这一目标的见解将不胜感激。
解决方案
您可以使用的第三个参数Enum.group_by
来提取gamer_id
,gamer_name
然后使用以下方法进行一些处理Enum.map
:
my_map = [%{user_id: 1, user_name: "David", gamer_id: 100, gamer_name: "John"},
%{user_id: 1, user_name: "David", gamer_id: 101, gamer_name: "Bil"},
%{user_id: 1, user_name: "David", gamer_id: 103, gamer_name: "Ruk"},
%{user_id: 2, user_name: "Ron", gamer_id: 104, gamer_name: "Sam"},
%{user_id: 2, user_name: "Ron", gamer_id: 105, gamer_name: "Sean"}]
my_map
|> Enum.group_by(&Map.take(&1, [:user_id, :user_name]), &Map.take(&1, [:gamer_id, :gamer_name]))
|> Enum.map(fn {k, v} -> Map.put(k, :games, v) end)
|> IO.inspect
输出:
[
%{
games: [
%{gamer_id: 100, gamer_name: "John"},
%{gamer_id: 101, gamer_name: "Bil"},
%{gamer_id: 103, gamer_name: "Ruk"}
],
user_id: 1,
user_name: "David"
},
%{
games: [
%{gamer_id: 104, gamer_name: "Sam"},
%{gamer_id: 105, gamer_name: "Sean"}
],
user_id: 2,
user_name: "Ron"
}
]
推荐阅读
- mysql - 如何找出每个用户登录的时间?
- ios - 我用 swift4/xcode10 制作的 CloudKit 应用程序只能在模拟器中运行
- python - 数据框中连续天数的平均值
- wso2 - 如何在 WSO2 5.4.1 中启用 X-Frame-Options?
- node.js - Nodejs模块导出,等待函数完成
- powershell - Powershell 中的快速注册表搜索器
- excel - 为什么 FormulaR1C1 将不需要的括号放入公式中?
- performance - 微服务和低延迟传输
- nunit - 如何修复“程序集不包含测试或未找到正确的测试驱动程序”。
- pfsense - 我可以将输入流量生成的输出流量路由到与输入流量不同的接口吗?