20240326_HashSet, ref

2024. 3. 26. 16:48IT/TIL

오늘의 TIL은 HashSet과 ref에 대한 내용이다.

 

HashSet

https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.hashset-1?view=net-8.0

 

HashSet<T> 클래스 (System.Collections.Generic)

값 집합을 나타냅니다.

learn.microsoft.com

 

C#에서 HashSet은 중복 값을 허용하지 않는 데이터 집합을 저장하는 컬렉션이다.

 

 

HashSet의 특징

1. 중복 방지 - HashSet에 원소를 추가할 때, 이미 집합에 같은 원소가 있는 경우에는 추가되지 않는다.

2. 빠른 검색 - HashSet은 원소의 해시를 사용하여 저정하므로, 원소의 존재 여부를 빠르게 검사할 수 있다.

3. 수학적 집합 연산 - HashSet은 합집합, 교집합, 차집합 같은 기본적인 수학적 집합 연산을 사용할 수 있다.

 

 

주요 메서드 및 속성

1. hashSet.Add() - 원소를 추가하는 메서드. (이미 존재하는 원소의 경우 false)

2. hashSet.Remove() - 원소를 제거하는 메서드

3. hashSet.Contains() - 원소를 포함하는지 확인하는 메서드

4. hashSet.Count - 원소의 수를 확인하는 메서드

5. hashSet.Clear() - 모든 원소를 제거하는 메서드

 

 

집합 연산

HashSet은 집합 연산을 지원하는 메서드를 제공하므로 아래와 같은 집합 연산을 수행할 수 있다.

1. hashSetA.UnionWith(hashSetB)

    두 hashSet을 합집합한다. 아래의 그림에서 두 원의 모든 원소

2. hashSetA.IntersectWith(hashSetB)

    두 hashSet을 교집합한다. 아래의 그림에서 보라색 부분의 원소

3. hashSetA.ExceptWith(hashSetB)

    hashSetA에서 B를 차집합한다. 아래의 그림에서 A에서 A교B를 제외한 부분의 원소

4. hashSetA.SymmetricExceptWith(hashSetB)

    hashSetA에서 교집합을 제외한 요소만 남긴다.

    아래의 그림에서 보라색을 제외한 파란색과 빨간색 부분의 원소

 

 

HashSet은 위와 같은 메서드와 속성을 가지는 컬렉션으로

유연하고 효율적인 방식으로 집합을 기반으로 한다는 특징이 있다.

데이터의 고유성을 유지하고(중복 값을 허용하지 않음)

빠른 검색 및 집합 연산을 사용하는 경우에 유용하게 사용할 수 있는 컬렉션이다.

 

 

ref

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/ref

 

ref 키워드 - C# 참조 - C#

ref 키워드 - C# 참조

learn.microsoft.com

 

C#에서 ref는 매개변수를 전달하는 과정에서 사용할 수 있는 한정자이다.

이때 ref는 참조 전달을 하는 특징을 가진다.

참조 전달은 값을 해당 메서드 등의 안에서 수정한 결과를 원본에도 영향을 미친다는 것이다.

즉, 어제 풀이했던 양과 늑대의 최대 양의 수가 처음에 0으로 시작하지만,

DFS 메서드 안에서 수정한 값이 계속해서 기록되어 DFS가 끝난 후에 초기의 0이 아닌

DFS 내에서 계산한 값이 결과로 나오는 것은 이 특징을 이용한 것이다.

 

즉, 값 타입과 참조 타입과 관련된 내용으로 생각할 수 있는 이론적 지식으로

ref와 out의 두 한정자를 갖고 있으며 이와 관련된 내용은 아래에서 정리한 것이 있다.

https://lawrence1031.tistory.com/97

 

20240118_C#에서의 ref, out

오늘의 TIL은 기술 면접과 관련된 내용으로 정확하게 이해하지 못한 내용인 ref와 out에 대한 내용이다. C#이나 유니티를 이용하면서 코딩을 하면서 따로 사용하지 않았던 키워드로 컴퓨터 공학이

lawrence1031.tistory.com

 

 

오늘은 어제 풀이했던 알고리즘 문제 '양과 늑대' 에서 사용했던 이론적 지식을 정리해보는 시간을 가졌는데

정확히 알지 못하고 사용하기만 했던 HashSet에 대한 전반적인 이해를 할 수 있었고

이와 더해서 ref를 다시 한 번 확인해보는 시간을 가질 수 있었다.