Класс HashSet
Класс HashSet из модуля std::collections
представляет собой коллекцию уникальных значений.
В отличие от вектора, HashSet не хранит
элементы в определённом порядке и автоматически
удаляет дубликаты. Для использования класса необходимо
подключить его через use std::collections::HashSet;.
Создать множество можно с помощью метода new,
который создаёт пустой HashSet.
Синтаксис
use std::collections::HashSet;
let mut set: HashSet<T> = HashSet::new();
Пример
Давайте создадим множество и добавим в него
несколько чисел с помощью метода insert:
use std::collections::HashSet;
fn main()
{
let mut set: HashSet<i32> = HashSet::new();
set.insert(1);
set.insert(2);
set.insert(3);
println!("{:?}", set);
}
Результат выполнения кода:
{1, 2, 3}
Пример
Давайте попробуем добавить в множество дубликат
и проверим длину с помощью метода len:
use std::collections::HashSet;
fn main()
{
let mut set: HashSet<i32> = HashSet::new();
set.insert(1);
set.insert(2);
set.insert(2);
set.insert(3);
set.insert(3);
println!("{}", set.len());
}
Результат выполнения кода:
3
Пример
Давайте проверим наличие элемента в множестве
с помощью метода contains:
use std::collections::HashSet;
fn main()
{
let mut set: HashSet<i32> = HashSet::new();
set.insert(1);
set.insert(2);
set.insert(3);
let res = set.contains(&2);
println!("{}", res);
}
Результат выполнения кода:
true
Пример
Давайте создадим множество из вектора с помощью
метода collect и удалим элемент
методом remove:
use std::collections::HashSet;
fn main()
{
let vec = vec![1, 2, 2, 3, 3, 4];
let mut set: HashSet<i32> = vec.into_iter().collect();
set.remove(&2);
println!("{:?}", set);
}
Результат выполнения кода:
{1, 3, 4}
Пример
Давайте переберём все элементы множества
с помощью цикла for:
use std::collections::HashSet;
fn main()
{
let mut set: HashSet<i32> = HashSet::new();
set.insert(1);
set.insert(2);
set.insert(3);
for item in &set
{
println!("{}", item);
}
}
Результат выполнения кода:
1
2
3
Пример
Давайте найдём пересечение двух множеств
с помощью метода intersection:
use std::collections::HashSet;
fn main()
{
let mut set1: HashSet<i32> = HashSet::new();
set1.insert(1);
set1.insert(2);
set1.insert(3);
let mut set2: HashSet<i32> = HashSet::new();
set2.insert(2);
set2.insert(3);
set2.insert(4);
let res: HashSet<_> = set1.intersection(&set2).collect();
println!("{:?}", res);
}
Результат выполнения кода:
{2, 3}