本文简要介绍rust语言中 Struct std::collections::HashSet
的用法。
用法
pub struct HashSet<T, S = RandomState> { /* fields omitted */ }
hash set 实现为 HashMap
,其中值为 ()
。
与 HashMap
类型一样,HashSet
要求元素实现 Eq
和 Hash
特征。这通常可以通过使用 #[derive(PartialEq, Eq, Hash)]
来实现。如果您自己实现这些,重要的是要满足以下属性:
k1 == k2 -> hash(k1) == hash(k2)
换句话说,如果两个键相等,则它们的哈希值必须相等。
以这样一种方式修改项目是一个逻辑错误,即项目的哈希(由 Hash
特征确定)或其相等性(由 Eq
特征确定)在它位于集合中时发生变化。这通常只能通过 Cell
、 RefCell
、全局状态、I/O 或不安全代码实现。未指定由此类逻辑错误导致的行为(它可能包括Panics、不正确的结果、中止、内存泄漏或未终止),但不会是未定义的行为。
例子
use std::collections::HashSet;
// Type inference lets us omit an explicit type signature (which
// would be `HashSet<String>` in this example).
let mut books = HashSet::new();
// Add some books.
books.insert("A Dance With Dragons".to_string());
books.insert("To Kill a Mockingbird".to_string());
books.insert("The Odyssey".to_string());
books.insert("The Great Gatsby".to_string());
// Check for a specific one.
if !books.contains("The Winds of Winter") {
println!("We have {} books, but The Winds of Winter ain't one.",
books.len());
}
// Remove a book.
books.remove("The Odyssey");
// Iterate over everything.
for book in &books {
println!("{}", book);
}
将 HashSet
与自定义类型一起使用的最简单方法是派生 Eq
和 Hash
。我们还必须派生 PartialEq
,这将在未来被 Eq
暗示。
use std::collections::HashSet;
#[derive(Hash, Eq, PartialEq, Debug)]
struct Viking {
name: String,
power: usize,
}
let mut vikings = HashSet::new();
vikings.insert(Viking { name: "Einar".to_string(), power: 9 });
vikings.insert(Viking { name: "Einar".to_string(), power: 9 });
vikings.insert(Viking { name: "Olaf".to_string(), power: 4 });
vikings.insert(Viking { name: "Harald".to_string(), power: 8 });
// Use derived implementation to print the vikings.
for x in &vikings {
println!("{:?}", x);
}
可以从数组初始化具有已知项目列表的HashSet
:
use std::collections::HashSet;
let viking_names = HashSet::from(["Einar", "Olaf", "Harald"]);
相关用法
- Rust HashSet.get_or_insert_with用法及代码示例
- Rust HashSet.insert用法及代码示例
- Rust HashSet.get_or_insert用法及代码示例
- Rust HashSet用法及代码示例
- Rust HashSet.is_superset用法及代码示例
- Rust HashSet.shrink_to用法及代码示例
- Rust HashSet.with_hasher用法及代码示例
- Rust HashSet.with_capacity用法及代码示例
- Rust HashSet.difference用法及代码示例
- Rust HashSet.try_reserve用法及代码示例
- Rust HashSet.hasher用法及代码示例
- Rust HashSet.drain_filter用法及代码示例
- Rust HashSet.get用法及代码示例
- Rust HashSet.is_empty用法及代码示例
- Rust HashSet.shrink_to_fit用法及代码示例
- Rust HashSet.len用法及代码示例
- Rust HashSet.drain用法及代码示例
- Rust HashSet.new用法及代码示例
- Rust HashSet.remove用法及代码示例
- Rust HashSet.reserve用法及代码示例
- Rust HashSet.with_capacity_and_hasher用法及代码示例
- Rust HashSet.contains用法及代码示例
- Rust HashSet.replace用法及代码示例
- Rust HashSet.clear用法及代码示例
- Rust HashSet.union用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::collections::HashSet。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。