.NET을 사용하여 별개의 항목 목록을 만드는 가장 효율적인 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1727894

문제

나는 큰 값 목록 (100-200 문자열)을 가지고 있으며 그것들의 뚜렷한 목록을 반환해야합니다. .NET을 사용 하여이 작업을 수행하는 가장 효율적인 방법은 무엇입니까? 내가 생각할 수있는 두 가지 방법은 다음과 같습니다.

  1. ienumerable 클래스의 고유 한 방법을 사용하십시오.
  2. 사전을 사용하십시오

사전 접근 방식이 원시적 인 용어로 빠르면 코드 유지 관리에 대한 상충 관계를 고려하십시오.

도움이 되었습니까?

해결책

나는 기대할 것이다 Enumerable.Distinct 한 번만 수행하는 경우 사전을 사용하는 것만 큼 빠릅니다. 값을 추가/제거하고 별개의 성을 유지하려면 HashSet<string> (기본적으로 내가 기대하는 것은 후드 아래에서하고있는 것입니다. Distinct() 순서를 유지하면서 새로운 값을 찾을 때 새로운 값을 반환 할 것입니다.

실제로, 그냥 사용하기 만하면됩니다.

HashSet<string> distinctItems = new HashSet<string>(list);

순서가 엉망이되는 것을 신경 쓰지 않으면 꽤 좋은 (그리고 간단한) 솔루션이 될 것입니다. a를 사용하는 것보다 간단합니다 Dictionary, 그리고 개념적으로 더 깨끗하게 진짜 키를 값에 매핑하려고합니다).

(그 어느 때보 다 읽기 쉬운 솔루션을 먼저 찾아서 벤치마킹하는 것이 좋습니다. Distinct 가장 읽기 쉬운 방법 일 수 있습니다. 그렇지 않으면 제안합니다 HashSet.)

다른 팁

나는 개인적으로 LINQ에서 제공하는 고유 한 () 메소드와 함께 갈 것입니다. 읽고 유지하는 것이 훨씬 쉽습니다. LINQ를 사용하는 것이 사전을 사용하는 것보다 느리게 진행되는 동안 차이는 작고 (나열된 경우) 데이터베이스 쿼리 또는 웹 서비스 호출을 최적화하는 데 시간이 더 좋습니다.

여기서 프로파일 링을 사용하도록 당신을 크게 할 것입니다. 샘플 항목이있는 목록을 생성하고 두 가지 방법을 사용하여 1m 회라고 말한 다음 각 방법으로 사용되는 시간을 측정하십시오.

가독성이 우려되는 경우 a를 만드십시오 GetDistinctItems 방법 및 코드를 그 안에 넣습니다 : voilà, 자체 문서화 코드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top