문자열이 문자열 리스트 중 하나라도 포함하는지 알아내기 C# Linq
기존 방식
기존엔 문자열 A가 문자열 리스트 B의 요소 중 하나라도 포함하는지 알아내려면 다음과 같이 해야 했습니다.
public static void Main(string[] args)
{
string A = "aabacdd";
List B = new List();
B.AddRange(new string[] { "a", "b", "c", "d", "aa", "ba", "cc", "dd" });
bool contain = false;
foreach (string e in B)
{
if (A.IndexOf(e) != -1)
{
contain = true;
break;
}
}
}
겨우 저런 간단한 로직 하나 실행하는데 이렇게 긴 코드가 필요했죠. 하지만 Linq를 사용하면 단 한 줄로 문자열이 다른 문자열 리스트 중 하나라도 포함하는지 검사가 가능합니다.
public static void Main(string[] args)
{
var A = "aabacdd";
var B = new List();
B.AddRange(new string[] { "a", "b", "c", "d", "aa", "ba", "cc", "dd" });
bool contain = B.Any(A.Contains);
bool contain = B.Any(A.Contains); 한 줄. 정말 간단하죠?
간략하게 설명을 드리자면 IEnumerable
따라서 B.Any(A.Contains); 는 B 시퀀스의 모든 요소에 대해 A.Contains(B의 각 요소)호출을 반복합니다. 풀어 쓰면 이런 형식으로 되겠죠.
// B.Any(A.Contains)를 하나하나 호출한다면
bool result =
A.Contains(B[0]) ||
A.Contains(B[1]) ||
A.Contains(B[3]) ||
//...
A.Contains(B[B.Count - 1]);
댓글
댓글 쓰기