Reputation: 38773
I have a basic Rust Vec
object named MenuResponse
. The code looks like this:
#[get("/v1/role/menu")]
pub fn get_role_menu_tree() -> content::Json<String> {
let menu_responses:Vec<MenuResponse> = menu_query_full_tree::<Vec<MenuResource>>(&request);
let menu_vec:Vec<DynamicMenuResponse> = admin_user_menus(login_user_info);
for mut menu_res in menu_responses {
let ids:Vec<i32> = menu_vec.iter()
.map(|item| item.id)
.collect();
if ids.contains(&menu_res.id){
menu_res.checked = true;
}
}
return box_rest_response(menu_responses);
}
The MenuResponse
is defined like this:
#[derive(Deserialize, Serialize)]
#[allow(non_snake_case)]
pub struct MenuResponse {
pub id: i32,
pub name: String,
pub res_type: i32,
pub created_time: i64,
pub updated_time: i64,
pub remark: Option<String>,
pub path: Option<String>,
pub parent_id: i32,
pub sort: i32,
pub checked: bool,
pub children: Vec<MenuResponse>
}
I want to change each element in the Vec<MenuResponse>
's property, in Java. In Java we can just set the value for each element. What should I do for an equivalent behavior in Rust? It seems I have to new Vec
and put an element with the new value for each element? What should I do to change the menu_responses:Vec
element property without creating a new Vec?
Upvotes: 0
Views: 93
Reputation: 42716
You could use iter_mut
to get &mut T
of the Vec<T>
elements:
#[get("/v1/role/menu")]
pub fn get_role_menu_tree() -> content::Json<String> {
let mut menu_responses:Vec<MenuResponse> = menu_query_full_tree::<Vec<MenuResource>>(&request);
let menu_vec:Vec<DynamicMenuResponse> = admin_user_menus(login_user_info);
let ids:Vec<i32> = menu_vec.iter()
.map(|item| item.id)
.collect();
for menu_res in menu_responses.iter_mut() {
if ids.contains(&menu_res.id){
menu_res.checked = true;
}
}
return box_rest_response(menu_responses);
}
Playground example
Upvotes: 1