Stack 특정 값 존재하는지 확인하는 방법
Stack은 제일 마지막에 들어온 데이터가 가장 먼저 나가는 LIFO(Last-In First-Out) 구조의 자료구조입니다.
C#의 컬렉션은 Stack 클래스를 제공하며, Push() 메서드와 Pop() 메서드를 사용하여 데이터를 추가하거나 제거할 수 있습니다.
이번 포스팅은 Stack 구조에 대해 설명하지는 않으며, 특정 값 또는 특정 조건을 만족하는 데이터가 존재하는지 확인할 수 있는 몇 가지 방법을 소개합니다.
방법 1. Stack 클래스의 Contains 메서드
Stack 클래스의 Contains() 메서드를 사용하여 특정 값이 존재하는지 확인할 수 있습니다.
Contains() 메서드는 매개변수로 전달된 값이 Stack에 존재하면 true를 반환하고 그렇지 않으면 false를 반환합니다.
public bool Contains(T item);
다음 예제는 String 타입의 Stack에서 문자열 "React"와 "Svelte"가 존재하는지 Contains() 메서드로 확인합니다.
class Program
{
static void Main(string[] args)
{
Stack<string> stack = new Stack<string>();
stack.Push("Java");
stack.Push("React");
stack.Push("JavaScript");
stack.Push("TypeScript");
stack.Push("C Sharp");
bool isReactExists = stack.Contains("React");
bool isSvelteExists = stack.Contains("Svelte");
Console.WriteLine("Stack에 \"React\"는 존재하는가? " + isReactExists);
Console.WriteLine("Stack에 \"Svelte\"는 존재하는가? " + isSvelteExists);
}
}
[실행 결과]
Stack에 "React"는 존재하는가? True
Stack에 "Svelte"는 존재하는가? False
방법 2. LINQ의 Any 메서드
Stack 클래스의 Contains() 메서드는 특정 값이 존재하는지 확인할 수 있지만, 특정 조건을 만족하는 값이 있는지 확인하는 용도로 사용하기 어렵습니다.
특정 조건을 만족하는지 확인하는 방법으로 LINQ에서 제공하는 Any() 메서드를 사용할 수 있습니다.
public static bool Any<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
Any() 메서드는 배열 또는 컬렉션과 같은 데이터 집합에서 특정 조건을 만족하는 요소가 하나라도 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
먼저, LINQ에서 제공하는 기능을 사용하기 위해 다음 네임스페이스를 추가합니다.
using System.Linq;
다음 예제는 String 타입의 Stack에서 Any() 메서드를 사용하여 특정 조건을 만족하는 문자열이 있는지 확인합니다.
class Program
{
static void Main(string[] args)
{
Stack<string> stack = new Stack<string>();
stack.Push("Java");
stack.Push("React");
stack.Push("JavaScript");
stack.Push("TypeScript");
stack.Push("C Sharp");
bool resultAny1 = stack.Any(str => str.StartsWith("Type") && str.Length >= 5);
bool resultAny2 = stack.Any(str => str.StartsWith("S") && str.Length >= 5);
Console.WriteLine("문자열이 \"Type\"으로 시작하고 길이가 5이상인 문자열이 존재하는가? "
+ resultAny1);
Console.WriteLine("문자열이 \"S\"로 시작하고 길이가 5이상인 문자열이 존재하는가? "
+ resultAny2);
}
}
[실행 결과]
문자열이 "Type"으로 시작하고 길이가 5이상인 문자열이 존재하는가? True
문자열이 "S"로 시작하고 길이가 5이상인 문자열이 존재하는가? False
방법 3. LINQ의 All 메서드
Stack에 모든 요소가 특정 조건을 만족하는지 확인하기 위해 LINQ의 All() 메서드를 사용할 수 있습니다.
All() 메서드는 모든 요소가 특정 조건을 만족하면 true를 반환하고 그렇지 않으면 false를 반환합니다.
public static bool All<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
다음 예제는 String 타입의 Stack에서 모든 문자열의 길이가 3 이상인지 All() 메서드를 사용하여 확인합니다.
class Program
{
static void Main(string[] args)
{
Stack<string> stack = new Stack<string>();
stack.Push("Java");
stack.Push("React");
stack.Push("JavaScript");
stack.Push("TypeScript");
stack.Push("C Sharp");
bool resultAll = stack.All(str => str.Length >= 3);
Console.WriteLine("문자열의 길이가 3 이상인가? " + resultAll);
}
}
[실행 결과]
문자열의 길이가 3 이상인가? True
LINQ에서 제공하는 Any() 메서드와 All() 메서드에 대한 세부적인 내용은 아래 포스팅에서 확인할 수 있습니다.
[C#]LINQ 특정 조건을 만족하는지 체크하는 방법 - All, Any 메서드
Quantifiers 연산 Quantifiers 연산은 컬렉션과 같은 데이터 집합에서 모든 요소들이 특정 조건을 만족하는지 확인할 수 있는 방법들을 제공합니다. Quantifiers 연산에서 제공하는 메서드인 All(), Any(), Con
developer-talk.tistory.com
'C#' 카테고리의 다른 글
[C#]List의 타입을 변경하는 방법 (0) | 2022.08.28 |
---|---|
[C#]List 다중 삭제 (0) | 2022.08.28 |
[C#]List 마지막 요소 제거 (0) | 2022.08.28 |
[C#]HashSet 반복문 사용 방법 (0) | 2022.08.23 |
[C#]HashSet 합치는 방법 (0) | 2022.08.22 |
댓글