凯里门户网阿亮seo技术顾问
Rust 编程小技巧(7)
1. 结构体 Display trait
结构体的两种形式,对应的成员取法不同;
前者用 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. 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);
}
输出:
{"one": 1, "two": 2}
{"one": 1, "two": 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);}
}
输出:
Key=four, Value=4
Key=one, Value=1
Key=three, Value=3
Key=two, Value=2
Key=three, Value=3
Key=two, Value=2
Key=one, Value=1
Key=four, Value=4
相关阅读:
Rust 编程小技巧摘选(1)_Hann Yang的博客-CSDN博客
Rust 编程小技巧摘选(2)_Hann Yang的博客-CSDN博客
Rust 编程小技巧摘选(3)_Hann Yang的博客-CSDN博客
Rust 编程小技巧摘选(4)_Hann Yang的博客-CSDN博客
Rust 编程小技巧摘选(5)_Hann Yang的博客-CSDN博客
Rust 编程小技巧摘选(6)_Hann Yang的博客-CSDN博客