本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。