Rust에서 두 세트 간의 차이 계산하기

Nilesh Katuwal 2023년6월21일
  1. Rust의 해시 세트
  2. Rust에서 두 세트 간의 차이 계산하기
Rust에서 두 세트 간의 차이 계산하기

이 기사에서는 두 집합 간의 차이를 계산하는 내장 함수에 대해 설명합니다.

Rust의 해시 세트

해시 세트는 값이 ()HashMap으로 구현됩니다. 유형과 마찬가지로 HashSet의 요소는 EqHash 특성을 구현해야 합니다.

일반적으로 이것은 #[derive(PartialEq, Eq, hash)]로 수행할 수 있습니다. 그러나 이를 직접 구현하는 경우 다음과 같은 특성이 유지되어야 합니다.

통사론:

let mut HashSet_name= HashSet::new();

두 개의 키가 같은지 알아야 합니다. 해시도 동일해야 합니다.

예:

fn main() {
use std::collections::HashSet;
let mut foods = HashSet::new();
foods.insert("I love to eat".to_string());
foods.insert("Ramen with cheese".to_string());
foods.insert("Ramen with eggs".to_string());
foods.insert("Ramen with seaweed".to_string());

if !foods.contains("Sesame") {
    println!("We have {} foods, but sesame is not the one I wanted.",
             foods.len());
}
foods.remove("Ramen with eggs.");

for food in &foods {
    println!("{food}");
}
}

출력:

We have 4 foods, but sesame is not the one I wanted.
Ramen with cheese
Ramen with seaweed
Ramen with eggs
I love to eat

HashSet에 값을 삽입하면(즉, 새 값이 기존 값과 동일하고 둘 다 동일한 해시를 가짐) 새 값이 이전 값을 대체합니다.

세트에는 네 가지 기본 작업이 있습니다(각 후속 호출은 반복자를 반환함).

  1. 결합 - 두 집합에서 모든 개별 요소를 가져옵니다.
  2. difference - 두 번째에 없는 첫 번째 집합에서 모든 요소를 검색합니다.
  3. 교차 - 두 세트 모두에 대한 모든 고유 요소를 검색합니다.
  4. 대칭 차이 - 두 집합이 아닌 두 집합의 모든 요소를 검색합니다.

다음은 집합 간의 차이를 찾는 예입니다. 우리는 그 차이가 대칭적이지 않다는 것을 알아야 합니다.

fn main() {
use std::collections::HashSet;
let x = HashSet::from([1, 2, 3]);
let y = HashSet::from([4, 2, 3, 4]);

for z in x.difference(&y) {
    println!("{z}");
}

let diff: HashSet<_> = x.difference(&y).collect();
assert_eq!(diff, [1].iter().collect());

let diff: HashSet<_> = y.difference(&x).collect();
assert_eq!(diff, [4].iter().collect());
}

출력:

1

Rust에서 두 세트 간의 차이 계산하기

이 프로그램은 두 개의 HashSets를 빌드하여 정수 요소를 저장하고 두 세트 간의 차이점을 찾고 결과를 표시합니다. 이 두 개의 HashSets는 다음 소스 코드에 정수 요소를 저장할 수 있습니다.

그런 다음 difference() 기술을 사용하여 두 세트 간의 차이를 결정했습니다. 그런 다음 결과를 인쇄했습니다.

use std::collections::HashSet;

fn main() {
    let first_set: HashSet<_> = [10, 20, 30, 40].iter().cloned().collect();
    let second_set: HashSet<_> = [10, 20, 30].iter().cloned().collect();

    println!("The difference betwen first_set and second_set is:");
    for d in first_set.difference(&second_set) {
        print!("{} ", d);
    }
}

출력:

The difference betwen first_set and second_set is:
40