Подборка советов по программированию на Rust (7)

eb88291a18a94ba4ace118fb4e46ef23.png

Советы по программированию на 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

Guess you like

Origin blog.csdn.net/boysoft2002/article/details/132153172