Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# LINQ에서 All과 Any의 차이점 완벽 정리

C# LINQ에는 시퀀스의 요소를 조건에 따라 검사하는 두 가지 대표적인 메서드가 있습니다. 바로 Any()All()입니다. 두 메서드는 이름이 비슷해 헷갈리기 쉽지만, 동작 방식은 완전히 다릅니다.

Any()와 All()의 기본 개념

Any(조건식) 메서드는 소스 시퀀스의 요소 중 하나라도 주어진 조건을 만족하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

반면 All(조건식) 메서드는 소스 시퀀스의 모든 요소가 주어진 조건을 만족해야만 true를 반환하고, 단 하나의 요소라도 조건을 벗어나면 false를 반환합니다.

Any() 예제

static void Main(string[] args){
    IEnumerable<double> doubles = new List<double> { 1.2, 1.7, 2.5, 2.4 };
    bool result = doubles.Any(val => val < 1);
    System.Console.WriteLine(result);
    IEnumerable<double> doubles1 = new List<double> { 0.8, 1.7, 2.5, 2.4 };
    bool result1 = doubles1.Any(val => val < 1);
    System.Console.WriteLine(result1);
    Console.ReadLine();
}

실행 결과

False
True

첫 번째 리스트 { 1.2, 1.7, 2.5, 2.4 }에는 1보다 작은 값이 없으므로 False가 출력됩니다. 반면 두 번째 리스트 { 0.8, 1.7, 2.5, 2.4 }에는 0.8이라는 조건을 만족하는 요소가 하나 존재하므로 True가 출력됩니다.

All() 예제

static void Main(string[] args){
    IEnumerable<double> doubles = new List<double> { 0.8, 0.9, 0.6, 0.7 };
    bool result = doubles.All(val => val < 1);
    System.Console.WriteLine(result);
    IEnumerable<double> doubles1 = new List<double> { 0.8, 0.9, 1.0, 0.7 };
    bool result1 = doubles1.All(val => val < 1);
    System.Console.WriteLine(result1);
    Console.ReadLine();
}

실행 결과

True
False

첫 번째 리스트의 모든 요소(0.8, 0.9, 0.6, 0.7)가 1보다 작으므로 True가 출력됩니다. 그러나 두 번째 리스트에는 1.0이라는 조건을 만족하지 않는 요소가 포함되어 있어 False가 출력됩니다.

정리 및 활용 팁

두 메서드 모두 조건에 맞는 결과를 확인하는 즉시 순회를 중단하는 단락 평가(short-circuit evaluation) 방식으로 동작하기 때문에 불필요한 연산 없이 효율적으로 실행됩니다.

또한 빈 컬렉션에 대해 호출할 경우 Any()는 false를, All()은 true를 반환한다는 점도 기억해 두면 좋습니다. 이는 "공집합에 대한 전칭 명제는 항상 참이다"라는 논리 규칙과 일치하는 결과입니다.