2009-11-24 5 views
1

GetHashCode 값에 의해 반환 된 값으로 개체를 비교하는 기본 제공 IEqualityComparer가 있습니까? 작성하기 쉽지만 맞춤 클래스 대신 제공된 클래스를 사용하는 것을 선호합니다.해시 값만 사용하여 개체를 비교하는 기본 제공 IEqualityComparer가 있습니까?

현재 코드 :

private class HashComparer : IEqualityComparer<TKey> 
{ 
    private readonly Func<TKey, int> _Hasher; 

    public HashComparer (Func<TKey, int> hasher) 
    { 
     _Hasher = hasher; 
    } 

    public bool Equals (TKey x, TKey y) 
    { 
     // null supposed to throw, therefore no check 
     return _Hasher (x) == _Hasher (y); 
    } 

    public int GetHashCode (TKey obj) 
    { 
     return _Hasher (obj); 
    } 
} 
+2

왜 ???????????? –

+0

아마도 존재하지 않습니다. – malay

+0

왜? 내 특별한 경우에 내가 필요한 것입니다 : – mafu

답변

4

아니, 그런 것은 지금까지 내가 알고 있어요으로 프레임 워크에 존재하지 않습니다.

해시 코드는 고유 할 필요가 없으므로 2^32 가능한 값 이하의 유형 및 해시 이외의 일반 항등식을 모방하는 데 사용할 수 없습니다. 생성 알고리즘은 각 값에 대해 고유 한 코드를 제공합니다.

저는 프레임 워크에서 찾을 수없는 이유 중 하나 인 현명한 사용 방법에 대해 고민하고 있습니다. 아마도 매우 유용하다고 생각되는 특수한 상황이있을 수 있지만 기본 프레임 워크에 넣기에는 충분하지 않습니다.

관심의 대상이 무엇입니까?

+1

'Dictionary >'를 빌드합니다. 여기서 외부 사전은 피팅 내부 사전에 액세스하기 위해 해시를 사용합니다. 내부 사전은 "보통"동등한 비교를 사용합니다. – mafu

+0

그래서 질문이 있습니다. http://stackoverflow.com/questions/1784408 – mafu

+0

값 비싼 해시를 사용하는 데 실패합니다. 왜 항상 싼 해시를 사용하고 충돌에 평등을 사용하지 않는 것이 좋을까요? 하지만 정말로이 경로를 가고 싶다면 사용자 고유의 IEqualityComparer를 구현해야합니다. 당신이 말했듯이, (심지어 평범하지 않아도) 쉽게 할 수 있습니다. –