rust - 如何在结构向量中执行 group_by?
问题描述
我不太明白如何group_by
在 Rust 中使用(如果我理解正确的话,我需要这个函数)。这个例子尽可能抽象。我有一个结构体:
[
Temp
{ user_id: 2, username: "test", role_id: 1, role: 123 },
Temp
{ user_id: 2, username: "test", role_id: 2, role: 456 }
]
我想得到
User {
user_id: 2,
username: "test",
roles: [
Role {
id: 1,
role: 123
},
… etc
]
}
代码示例(游乐场):
#[derive(Debug)]
struct Temp {
user_id: i32,
username: String,
role_id: i32,
role: String,
}
#[derive(Debug)]
struct User {
id: i32,
username: String,
roles: Vec<Role>,
}
#[derive(Debug)]
struct Role {
id: i32,
role: String,
}
fn main() {
let temps_data = vec![
Temp {
user_id: 1,
username: "test".to_string(),
role_id: 1,
role: "test1".to_string(),
},
Temp {
user_id: 1,
username: "test".to_string(),
role_id: 2,
role: "test2".to_string(),
},
];
// temps_data.group_by(|obj| {
// // I don't really understand what should be here
// })
// for example, what I want to get
let result = vec![User {
id: 1,
username: "test".to_string(),
roles: vec![
Role {
id: 1,
role: "test1".to_string(),
},
Role {
id: 2,
role: "test2".to_string(),
},
],
}];
}
解决方案
我相信你正在尝试做这样的事情:
let res: Vec<User> = temp_data
.iter()
.group_by(|x| (x.user_id, x.username.clone()))
.into_iter()
.map(|((id, username), group)| User {
id,
username: username,
roles: Some(group.map(|u| Role {id: u.role_id, role: u.role.clone()}).collect()),
})
.collect();
println!("{:?}", res);
// [User { id: 1, username: "test", roles: Some([Role { id: 1, role: "test1" }, Role { id: 2, role: "test2" }]) }]
推荐阅读
- asp.net-core - EF Core - 无法为标识列 SqlException 插入显式值
- wordpress - 在电子邮件中发送自定义变量 - 联系表格 7
- spring-batch - couchbase 可以用作 spring-batch 的底层 JobRepository 吗?
- html - WBR 标记在 contenteditable div (Safari) 中破坏箭头导航
- html - Boostrap 折叠项在按钮上不起作用,数据的 id 正确且包含所有 cdn
- java - 如何正确配置 SimpleMongoRepository?
- json - 在python3中访问json文件
- ios - -avas- AVAudioSessionPortImpl ... Xcode 中的消息泛洪
- wcf - 如何在 WCF 服务应用程序中使用 Microsoft.SqlServer.Types
- unity3d - 在 DontDestroyOnLoad 的新场景中找不到游戏对象