Set는 중복이 없는 value들을 저장하는 구조이며, 저장 순서를 보장하지 않습니다.
러스트의 std::collections
모듈에서 HashSet을 지원합니다. 어떻게 사용하는지 알아보겠습니다.
1. HashSet 생성 및 초기화
HashSet<TYPE>
은 TYPE 타입 데이터를 저장하는 HashSet을 선언하며, HashSet::new()
로 비어있는 HashSet을 생성할 수 있습니다.
let mut my_set: HashSet<&str> = HashSet::new();
컴파일러가 추론을 통해 타입을 알 수 있는 경우라면, 아래와 같이 타입을 입력하지 않아도 암시적으로 타입이 설정됩니다.
use std::collections::HashSet;
fn main() {
let mut my_set = HashSet::new();
my_set.insert("apple");
println!("{:?}", my_set);
}
Output:
{"apple"}
생성과 동시에 초기화
HashSet::from(array)
는 HashSet을 생성할 때 array의 요소들을 HashSet에 추가합니다.
아래와 같이 HashSet 생성과 동시에 초기 값을 설정할 수 있습니다.
use std::collections::HashSet;
fn main() {
let hash_set = HashSet::from([1, 2, 3, 4, 5]);
println!("{:?}", hash_set)
}
Output:
{1, 4, 5, 3, 2}
2. HashSet 값 추가: insert()
insert(value)
는 HashSet에 value를 추가합니다.
- 이미 저장된 value를 추가 시, 추가되지 않습니다.
use std::collections::HashSet;
fn main() {
let mut my_set = HashSet::new();
my_set.insert("apple");
my_set.insert("kiwi");
my_set.insert("grape");
my_set.insert("mango");
println!("{:?}", my_set);
}
Output:
{"mango", "kiwi", "grape", "apple"}
3. HashSet 값 읽기/가져오기: get()
get(value)
는 HashSet에서 value를 Option 객체로 가져옵니다.
- HashSet에 찾으려는 value가 없으면 None이 리턴되어 예외처리 가능
- HashSet에 찾으려는 value가 있으면 Some이 리턴되어 value에 접근할 수 있음
use std::collections::HashSet;
fn main() {
let mut my_set = HashSet::new();
my_set.insert("apple");
my_set.insert("kiwi");
my_set.insert("grape");
let ret = my_set.get("kiwi");
println!("{:?}", ret);
}
Output:
Some("kiwi")
match
를 사용하여 Optional에 저장된 value를 가져올 수 있습니다. value가 없을 수 있기 때문에 Some과 None에 대한 처리가 필요합니다.
use std::collections::HashSet;
fn main() {
let mut my_set = HashSet::new();
my_set.insert("apple");
my_set.insert("kiwi");
my_set.insert("grape");
match my_set.get("kiwi") {
Some(value) => {
println!("Found value: {}", value);
}
None => {
println!("Nothing found");
}
}
}
Output:
Found value: kiwi
아래와 같이 좀 더 간결한 코드로 match 구문을 작성할 수 있습니다.
match my_set.get(&"kiwi") {
Some(value) => println!("Found value: {}", value),
None => println!("Nothing found")
}
4. HashSet에서 value 제거: remove()
remove(value)
는 HashSet에서 value를 제거합니다.
use std::collections::HashSet;
fn main() {
let mut my_set = HashSet::new();
my_set.insert("apple");
my_set.insert("kiwi");
my_set.insert("grape");
println!("{:?}", my_set);
// kiwi 제거 후 확인
my_set.remove("kiwi");
println!("{:?}", my_set);
}
Output:
{"apple", "kiwi", "grape"}
{"apple", "grape"}
5. HashSet의 모든 요소 순회
iter()
는 HashSet에 저장된 모든 요소들을 참조하는 Iterator를 리턴합니다.
아래와 같이 HashSet의 모든 요소를 for문으로 순회할 수 있습니다.
use std::collections::HashSet;
fn main() {
let mut my_set = HashSet::new();
my_set.insert("apple");
my_set.insert("kiwi");
my_set.insert("grape");
for fruit in my_set.iter() {
println!("{}", fruit);
}
}
Output:
apple
kiwi
grape
6. HashSet의 요소 개수/길이: len()
len()
은 HashSet의 모든 요소 개수를 리턴합니다.
use std::collections::HashSet;
fn main() {
let mut my_set = HashSet::new();
my_set.insert("apple");
my_set.insert("kiwi");
my_set.insert("grape");
println!("{}", my_set.len());
}
Output:
3
7. 특정 요소 포함 여부 확인: contains()
contains(value)
는 HashSet에 특정 value가 포함되어있을 때 true를 리턴하며, 그렇지 않으면 false를 리턴합니다.
use std::collections::HashSet;
fn main() {
let mut my_set = HashSet::new();
my_set.insert("apple");
my_set.insert("kiwi");
my_set.insert("grape");
if my_set.contains("kiwi") {
println!("Has kiwi");
}
}
Output:
Has kiwi
Related Posts
- Rust - String을 char 리스트(Vector)로 변환
- Rust - 문자가 대문자인지 소문자인지 확인
- Rust - String에서 줄바꿈(newline) 문자 제거 방법
- Rust - String 대문자, 소문자 변환
- Rust - 현재 시간 가져오기 (DateTime, chrono)
- Rust - 예외 처리 방법 (Exception handling)
- Rust - String.find()으로 문자열 Index 찾기
- Rust - match (Switch) 사용 방법
- Rust - Vector의 요소 제거 방법 (remove, retain, drain)
- Rust - String의 특정 Index 값 가져오기
- Rust - 문자열 뒤집기, 역순으로 변경
- Rust - String 객체에 문자열 추가하기
- Rust - sleep(), 몇 초 지연/대기 방법
- Rust - String을 Int, Float으로 변환
- Rust - Integer를 String으로 변환
- Rust - Float를 String으로 변환
- Rust - String 비교 방법 (==, !=, eq, ne)
- Rust - String을 str으로, str을 String으로 변환
- Rust - String 공백 제거 (trim, replace)
- Rust - 2개의 배열이 같은지 비교 (==, equals)
- Rust - 배열 길이 가져오기 (Array length)
- Rust - Vector를 배열로 변환 (vector to array)
- Rust - 배열의 최소, 최대 값 찾기 (min, max)
- Rust - 배열의 합계, 평균 (sum, average)
- Rust - 2개의 Vector가 같은지 비교 (==, equals)
- Rust - HashMap을 Vector로 변환
- Rust - Vector의 최소, 최대 값 찾기 (min, max)
- Rust - Vector의 합계, 평균 (sum, average)
- Rust - 벡터 길이 가져오기 (Vector length)
- Rust - 배열을 HashSet으로 변환
- Rust - 배열을 벡터로 변환하는 방법
- Rust - 배열(벡터) 모든 요소 출력
- Rust - 배열 나누기, 자르기 (split_at, slice)
- Rust - 2개 벡터 하나로 합치기
- Rust - HashSet을 Vector로 변환