Заполнение многомерных структур в Rust
Массив векторов
Пустой массив векторов заполняют двумя циклами.
Внешний проходит ячейки массива, внутренний
дописывает числа в вектор через push:
let mut rows: [Vec<i32>; 2] = [Vec::new(), Vec::new()];
for i in 0..2 {
for j in 1..=3 {
rows[i].push(j);
}
}
println!("{}", rows[1][2]); // выведет 3
Карта векторов
Векторы в карте собирают так же. Вместо индекса массива берут ключ:
use std::collections::HashMap;
fn main() {
let mut map: HashMap<&str, Vec<i32>> = HashMap::new();
let keys = ["a", "b"];
for i in 0..2 {
let mut row = Vec::new();
for j in 1..=2 {
row.push(j);
}
map.insert(keys[i], row);
}
println!("{}", map["b"][1]); // выведет 2
}
Вектор карт
Каждый элемент вектора - отдельная карта.
Ее собирают на шаге цикла и кладут в вектор
через push:
use std::collections::HashMap;
fn main() {
let mut table: Vec<HashMap<&str, i32>> = Vec::new();
for i in 1..=2 {
let mut row = HashMap::new();
row.insert("id", i);
table.push(row);
}
println!("{}", table[1]["id"]); // выведет 2
}
Практические задачи
Заполните массив из двух векторов числами
1, 2 и 3 в каждом.
Выведите последний элемент второго вектора.
Заполните карту векторов. По ключам
"a" и "b" лежат числа
4 и 5. Выведите второе
число ключа "b".
Заполните вектор двумя картами. В каждой
есть ключ "age", числа 27
и 31. Выведите возраст второй
карты.