본문 바로가기
유니티 공부/C# 문법

C# - Set과 HashSet(Add,Remove,Contains,IntersectWith,UnionWith)

by 코딩하는 돼징 2024. 2. 20.
반응형

Set(Abstract data type)

01 중복을 허용하지 않는다.

중복된 값을 허용하지 않으므로 데이터의 유일성을 보장한다. 그러므로 같은 값을 여러번 저장하더라도 실제로 한 번만 저장된다.

02 순서를 보장하지 않는다.

비선형구조이기 때문에 순서의 개념과 인덱스가 존재하지 않는다. 그러므로 Set에 저장된 요소를 인덱스를 사용하여 접근할 수 없다. 값을 추가하거나 삭제할 때는 해당 값을 검색하여 기능을 수행해야한다.

03 Set은 언제 쓰면 좋을까?

중복된 데이터를 제거해야 할 때와 데이터의 존재 여부를 확인해야 할 때이다. 


HashSet

해시 테이블을 기반으로 구현된 집합(Set)의 자료구조이다. 이는 중복된 요소를 허용하지 않고 요소의 순서를 보장하지 않는다. 큰 장점으로는 빠르게 요소를 검색할 수 있다.

 

주요 사용 예시

데이터 중복 피할때, 데이터 검색이 많이 필요할 때, 집합 연산을 수행할 때 등


주요 메서드

01 Add

주어진 요소를 HashSet에 추가한다. 만약 이미 요소가 존재한다면 추가하지 않고 false를 반환한다.

public bool Add (T item);

매개 변수

item : 집합에 추가할 요소

반환

Boolean : 개체가 추가되었으면 true, 이미 있으면 false

코드 예시

HashSet<int> numbers = new HashSet<int>();

numbers.Add(1);
numbers.Add(2);
numbers.Add(3);

 

02 Contains

지정된 요소가 HashSet에 있는지 여부 확인

public bool Contains (T item);

 

매개변수

item T : 있는지 확인할 요소

반환

Boolean : 존재하면 true, 존재하지 않으면 false 반환

코드 예시

HashSet<int> numbers = new HashSet<int>() { 1, 2, 3, 4 };
Console.WriteLine(numbers.Contains(2));  
Console.WriteLine(numbers.Contains(4));

03 Remove

요소 제거

public bool Remove (T item);

매개변수

item T : 제거할 요소

반환

Boolean : 성공적으로 제거한 경우 true, 아닌 경우 false

코드 예시

HashSet<int> numbers = new HashSet<int>() { 1, 2, 3, 4 };
numbers.Remove(2);

04 교집합

현재 HastSet과 지정된 또 다른 컬렉션에 공통으로 포함된 요소만 추출하고 다른 요소들은 제거

public void IntersectWith(IEnumerable<T> other);

 

매개변수

other : 교집합을 계산할 컬렉션

코드 예시

HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6 };

set1.IntersectWith(set2);

foreach (var item in set1)
{
    Console.WriteLine(item);  // 출력: 3, 4
}

05 합집합

현재 HashSet에 지정된 커렉션에 있는 요소를 추가한다. 즉 두 개의 집합을 합치는 역할을 한다. 중복된 요소는 추가되지 않는다.

public void UnionWith(IEnumerable<T> other);

매개변수

other : 추가될 요소를 가지고 있는 컬렉션

코드 예시

HashSet<int> set1 = new HashSet<int>() { 1, 2, 3 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5 };

set1.UnionWith(set2);

foreach (var item in set1)
{
    Console.WriteLine(item);  // 출력: 1, 2, 3, 4, 5
}

 

 

 

 

 

 

 

반응형

댓글