2010-03-05 2 views
1

LINQ 전문가가 Aggregate 및 Any가 두운 상태에서 작동하는 방식을 밝힐 수 있는지 궁금합니다.IEnumerable과 같은 개체를 검색 할 때 누적 대 Any 모두 <bool>

주어진 조건에 대해 배열을 테스트 한 결과를 저장하는 IEnumerable이 있다고 상상해보십시오. 배열의 요소가 false인지 여부를 확인하려고합니다. 하나의 옵션을 다른 옵션보다 우선 사용해야하는 이유가 있습니까?

IEnumerable<bool> results = PerformTests(); 

return results.Any(r => !r); //Option 1 
return results.Aggregate((h, t) => h && t); //Option 2 

는 더 명백으로 생산 코드에서 나는 한쪽으로 경향이 싶지만 호기심이는 후드 evalulated하는 방법에 차이가 있는지 여부 궁금.

답변

8

예, 확실히 옵션 1을 선호합니다. false 인 값을 찾으면 즉시 중지합니다.

옵션 2는 전체 배열을 통과합니다. 즉 정확하게는 무엇 때문에,

집계 항상 전체 IEnumerable<T>을 소비 할 필요가 :

그런 다음

+0

아, 그래요. 머리가 허위가되는대로 멈출만큼 똑똑한 지 궁금한가요. 그 결과가 항상 거짓이라는 것을 알았습니다. 감사합니다. –

3

존이 다시 나를 이길하지만, 일부 더 많은 텍스트를 추가하는 과정에서 :)뿐만 아니라 가독성 문제있다 해야 할 일 : (전체) 소스에서 데이터 세트를 생성하려면. 잘 알려진 Map/Reduce 시나리오의 "Reduce"입니다.

+0

엑스트라를 주셔서 감사합니다. 일부 문자열 연결 및 기타 변형을 수행하기 위해 집계를 사용하고 Any()가 훨씬 쉬운 옵션이라는 사실을 깨닫기 전에 자동으로 옵션 2를 작성하는 것을 발견했습니다. –

+0

각 연결마다 다른 작업을 수행해야하는 경우가 아니라면 string.Join을 Aggregate로 연결하여 IEnumerable 을 연결하는 것이 좋습니다. – Novaterata

관련 문제