Советы по программированию на Rust(7)
1. Черта отображения структуры
Для двух форм структуры соответствующие члены берутся по-разному;
В первом используются имена переменных-членов self.x, self.y, во втором используются индексные номера членов self.0, self.1, self.2, …
use std::fmt::Display;
use std::fmt::Result;
use std::fmt::Formatter;
struct Point {
x: f64,
y: f64,
}
struct Point2(f64, f64);
impl Display for Point {
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
write!(f, "({}, {})", self.x, self.y)
}
}
impl Display for Point2 {
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
write!(f, "({}, {})", self.0, self.1)
}
}
fn main() {
let p = Point { x: 2.0, y: -3.5 };
println!("{}", p);
let p = Point2(2.0, -3.5);
println!("{}", p);
}
выход:
(2, -3,5)
(2, -3,5)
2. HashMap и BTreeMap
Обе структуры данных хэш-таблицы в Rust имеют одинаковые точки:
Оба поддерживают использование Vec или String в качестве ключей, а также поддерживают использование других структур стандартной библиотеки в качестве ключей.
Оба поддерживают использование типа Option в качестве значения в паре ключ-значение.
Оба поддерживают использование функций-членов типа HashMap для выполнения основных операций, таких как вставка, удаление, поиск, обновление и т. д.
разница:
HashMap использует алгоритм хэш-таблицы (HashMap) для хранения пар ключ-значение, а BTreeMap использует алгоритм B-TREE (B-дерево) для хранения пар ключ-значение. Таким образом, BTreeMap работает лучше, чем HashMap, в таких операциях, как поиск, вставка и удаление.
Если вам нужно использовать структуру данных хеш-таблицы (HashMap), но вам не нужно обращаться к ней в порядке пар ключ-значение, а требования к производительности для таких операций, как поиск, вставка и удаление, не высоки, тогда вы можете использовать HashMap. Если вам необходимо использовать структуру данных хеш-таблицы (HashMap) и предъявляются высокие требования к производительности для таких операций, как поиск, вставка и удаление, и доступ к ним должен осуществляться в порядке пар ключ-значение, вы можете использовать BTreeMap.
Пример:
use std::collections::BTreeMap;
use std::collections::HashMap;
fn main() {
let mut x = BTreeMap::new();
x.insert("one", 1);
x.insert("two", 2);
println!("{:?}", x);
let x: HashMap<&str, i32> = [
("one", 1),
("two", 2),
].iter().cloned().collect();
println!("{:?}", x);
}
выход:
{"один": 1, "два": 2}
{"один": 1, "два": 2}
3. Просмотрите выходную хэш-таблицу
Используйте кортеж (k, v) в структуре цикла for...in... для чтения соответствующей пары ключ-значение:
use std::collections::BTreeMap;
use std::collections::HashMap;
fn main() {
let mut x = BTreeMap::new();
x.insert("one", 1);
x.insert("two", 2);
x.insert("three", 3);
x.insert("four", 4);
for (k, v) in &x {
println!("Key={}, Value={}", k, v);
}
println!();
let x: HashMap<&str, i32> = [
("one", 1),
("two", 2),
("three", 3),
("four", 4),
].iter().cloned().collect();
for (k, v) in &x {
println!("Key={key}, Value={val}", key = k, val = v);
}
}
выход:
Ключ=четыре, Значение=4
Ключ=один, Значение=1
Ключ=три, Значение=3
Ключ=два, Значение=2
Ключ=три, Значение=3
Ключ=два, Значение=2
Ключ=один, Значение=1
Ключ=четыре, Значение=4
Связанное чтение:
Выдержка из советов по программированию на Rust (1)_Блог Ханна Янга - Блог CSDN
Подборка советов по программированию на Rust (2)_блог Ханна Янга - блог CSDN
Выдержка из советов по программированию на Rust (3)_Блог Ханна Янга - Блог CSDN
Выдержка из советов по программированию на Rust (4)_Блог Ханна Янга - Блог CSDN
Выдержка из советов по программированию на Rust (5)_Блог Ханна Янга - Блог CSDN
Выдержка из советов по программированию на Rust (6)_Блог Ханна Янга - Блог CSDN