> 백엔드 개발 > C++ > LINQ의 Distinct 메서드가 사용자 지정 개체에 비효율적인 이유는 무엇이며 어떻게 해결할 수 있습니까?

LINQ의 Distinct 메서드가 사용자 지정 개체에 비효율적인 이유는 무엇이며 어떻게 해결할 수 있습니까?

Susan Sarandon
풀어 주다: 2025-01-20 19:32:12
원래의
525명이 탐색했습니다.

Why is LINQ's Distinct Method Inefficient with Custom Objects, and How Can I Fix It?

사용자 정의 개체에 대한 LINQ의 고유 메서드 비효율성 해결

LINQ의 Distinct() 메서드는 사용자 지정 개체와 함께 사용할 경우 비효율적일 수 있습니다. 이는 기본적으로 참조 동일성에 의존하기 때문입니다. 즉, 두 개체가 서로 다른 메모리 위치를 차지하는 경우에만 서로 다른 개체로 간주합니다. 동일한 속성 값을 가진 동일한 개체는 별도의 개체로 처리되어 중복된 결과가 발생합니다.

해결책은 사용자 정의 개체 클래스 내에 IEquatable<T> 인터페이스를 구현하는 데 있습니다. 이를 통해 메모리 주소가 아닌 속성을 기반으로 개체의 동등성을 결정하는 방법을 정의할 수 있습니다.

여기 Author를 구현하는 개선된 IEquatable<Author> 클래스가 있습니다.

<code class="language-csharp">public class Author : IEquatable<Author>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public bool Equals(Author other)
    {
        if (other is null) return false;
        return FirstName == other.FirstName && LastName == other.LastName;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(FirstName, LastName);
    }
}</code>
로그인 후 복사

Equals() 메서드를 재정의하고 GetHashCode()을 구현하면 Distinct()Author 속성을 ​​기반으로 중복 FirstName 개체를 올바르게 식별하고 제거하는 데 필요한 논리를 LastName에 제공할 수 있습니다. 보다 강력한 해시 코드 생성을 위해 HashCode.Combine을 사용하는 것에 유의하세요. 이렇게 하면 Equals()에서 동일하다고 간주되는 객체도 동일한 해시 코드를 생성하게 됩니다. 이 접근 방식을 사용하면 Distinct()은 이제 이름을 기준으로 중복 작성자 개체를 정확하게 식별하고 제거합니다.

위 내용은 LINQ의 Distinct 메서드가 사용자 지정 개체에 비효율적인 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿