Вектор структур в Rust
Несколько значений одного типа удобно держать в векторе. Если тип - структура, каждый элемент списка собирают отдельным литералом с теми же именами полей. Пустой вектор такого типа создают так же, как для чисел, с указанием типа элемента.
Готовый список записывают макросом с квадратными скобками: внутри через запятую идут литералы структур. К элементу обращаются по номеру, затем через точку берут нужное поле.
Сохраним двух пользователей в одном векторе и выведем имя второго:
struct User {
name: &'static str,
age: i32,
}
Соберем вектор и выведем имя второго:
let users = vec![
User { name: "ann", age: 20 },
User { name: "bob", age: 22 },
];
println!("{}", users[1].name);
На экране "bob". Номер элемента снова
начинается с нуля, как у вектора чисел.
Изменяемый вектор дополняют новым литералом в конец знакомой командой. Поле у элемента по номеру меняют, если вектор и запись объявлены изменяемыми:
struct User {
name: &'static str,
age: i32,
}
Дополним вектор и заменим возраст:
let mut users = vec![User { name: "ann", age: 20 }];
users.push(User { name: "bob", age: 22 });
users[0].age = 21;
println!("{}", users.len());
Дана структура:
struct User {
name: &'static str,
age: i32,
}
let users = vec![
User { name: "ann", age: 20 },
User { name: "bob", age: 22 },
];
Выведите возраст пользователя с номером
0.
Дана структура:
struct User {
name: &'static str,
age: i32,
}
let mut users = vec![User { name: "ann", age: 20 }];
Допишите в конец запись с именем "cy"
и возрастом 19, затем выведите длину
вектора.
Дана структура:
struct Score {
points: i32,
}
let scores = vec![
Score { points: 5 },
Score { points: 8 },
Score { points: 3 },
];
Сложите поля points всех элементов
и выведите сумму.