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 ブログ