2009-07-24 2 views

답변

2

.NET 4.0 어레이에서는 IStructuralEquatable 인터페이스를 통해이 기능을 지원하지만, 그 시점까지는 내가 스스로 두려워 할 것입니다.

1

프레임 워크 자체에는 아무 것도 없습니다. 제 3 자 구현이있을 수 있지만 내장 (및 공용)은 없습니다.

0

Array이 구현하는 IStructuralEquatable 인터페이스를 통해 네이티브를 지원할 가능성이 높지만 (.Net 4를 가리키는 데 Greg Beech에게 감사드립니다.) 그).

다음은 IEnumerable의 확장 메소드를 사용하는 간단한 구현입니다.

int HashContents<T>(this IEnumerable<T> enumerable) 
{ 
    int hash = 0x218A9B2C; 
    foreach (var item in enumerable) 
    { 
     int thisHash = item.GetHashCode(); 
     //mix up the bits. 
     hash = thisHash^((hash << 5) + hash); 
    } 
    return hash; 
} 

{0,0}{0,0,0}에 대해 서로 다른 해시 코드를 제공 할 것입니다.

+0

두 가지 빠른 질문 : 1) 이동을 더하고 곱하기보다 실제로 추가하는 것이 더 빠릅니까? 2) 내가 알 수있는 한, thisHash의 값이 항상 0이면, 최종 해시는 몇 개의 항목이 있더라도 0이됩니다. 이것은 당신의 마지막 문장과 모순되는 것 같습니다. –

+0

1) 릴리스 모드 VS2008에서 필자의 마이크로 벤치 마크는 shift-and-add 버전이 등가 곱셈보다 약 8 % 빠르다는 것을 나타냅니다. 2) 고마워, 코드가 수정되었습니다. –