Rustプログラミングのヒントセレクション(7)

eb88291a18a94ba4ace118fb4e46ef23.png

Rust プログラミングのヒント(7)

1. 構造表示特性

構造の 2 つの形式では、対応するメンバーが異なる方法で取得されます。

前者は self. メンバー変数名 self.x、self.y を使用し、後者は self. メンバー インデックス番号 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. ハッシュマップと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": 1、"2": 2}
{"1": 1、"2": 2}

3. 出力ハッシュ テーブルを調べます。

for...in... ループ構造内のタプル (k, v) を使用して、対応するキーと値のペアを読み取ります。

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、値 = 4
キー = 1、値 = 1
キー = 3、値 = 3
キー = 2、値 = 2

キー = 3、値 = 3
キー = 2、値 = 2
キー = 1、値 = 1
キー = 4、値 = 4


関連書籍:

Rust プログラミングのヒント抜粋 (1)_Hann Yang のブログ - CSDN ブログ

RustプログラミングTipsセレクション(2)_Hann Yangのブログ - CSDNブログ

Rust プログラミングのヒント抜粋 (3)_Hann Yang のブログ - CSDN ブログ

Rust プログラミングのヒント抜粋 (4)_Hann Yang のブログ - CSDN ブログ

Rust プログラミングのヒント抜粋 (5)_Hann Yang のブログ - CSDN ブログ

Rust プログラミングのヒント抜粋 (6)_Hann Yang のブログ - CSDN ブログ

おすすめ

転載: blog.csdn.net/boysoft2002/article/details/132153172