EDIT : 64 또는 128 비트도 사용할 수 있습니다. 어떤 이유로 든 내 뇌가 32 비트로 뛰어 올라서 충분하다고 생각했습니다.(대부분) 기본 값으로 구성된 구조체를 고유하게 식별하는 32 비트 해시 코드를 빠르게 생성합니다.
대부분 숫자 값 (int, decimal)으로 구성된 구조체와 각기 12 자 이상의 알파 문자가 아닌 3 개의 문자열이 있습니다. 나는 해시 코드로 작동 할 정수 값을 만들고, 그것을 빠르게 만들려고 노력하고있다. 일부 숫자 값도 Null 가능합니다.
BitVector32 또는 BitArray가이 엔데버에서 사용하기에 유용한 엔티티 인 것처럼 보이지만이 작업에서 자신의 의지로 어떻게 구부릴 수 있는지 잘 모르겠습니다. 내 구조체에는 3 개의 문자열, 12 개의 십진수 (7 개는 null 입력 가능) 및 4 개의 int가 들어 있습니다.
public struct Foo
{
public decimal MyDecimal;
public int? MyInt;
public string Text;
}
나는 각 값에 대해 숫자 식별자를 얻을 수 있습니다 알고 내 사용 사례를 단순화하기 위해
, 당신은 다음과 같은 구조체가 있다고 할 수 있습니다. MyDecimal과 MyInt는 물론 수치 적 관점에서 독특합니다. 문자열에는 일반적으로 고유 한 값을 반환하는 GetHashCode() 함수가 있습니다.
그래서 각 숫자 식별자로이 구조를 고유하게 식별하는 해시 코드를 생성 할 수 있습니까? 예 : 동일한 값을 포함하는 2 개의 다른 Foo를 비교하고 매번 동일한 해시 코드 (앱 도메인, 앱 재시작, 시간, Jupiters 달 정렬 등에 관계없이)를 얻을 수 있습니다.
해시가 희박하므로 사용 사례와의 충돌을 예상하지 못합니다.
아이디어가 있으십니까? 내 첫 번째 실행에서 모든 문자열 표현, concated 및 내장 된 GetHashCode() 사용했지만 몹시 비효율적 인 것 같습니다.
편집 : 조금 더 배경 정보. 구조 데이터가 웹 클라이언트에게 전달되고 클라이언트는 포함 된 값, 문자열 생성 등을 계산하여 페이지를 다시 렌더링합니다. 앞서 언급 한 19 개의 필드 구조는 정보의 단일 단위를 나타내며, 각 페이지는 많은 단위를 가질 수 있습니다. 렌더링 된 결과의 일부 클라이언트 측 캐싱을 수행하고 싶습니다. 따라서 서버에서 동일한 해시 식별자를 보면 클라이언트 측에서 다시 계산하지 않고 장치를 신속하게 다시 렌더링 할 수 있습니다. JavaScript 숫자 값은 모두 64 비트이므로 제 32 비트 제약 조건은 인위적이고 제한적이라고 생각합니다. 64 비트가 작동하거나 서버의 두 64 비트 값으로 나눌 수 있다면 128 비트라고 가정합니다.
GetHashCode의 문제점은 무엇입니까? –
나는 GetHashCode가 동일한 값을 반환 할 수 없다는 인상을 받았다. – CoolUserName
@JirkaHanika "예를 들어, 동일한 값을 포함하는 2 개의 다른 Foo를 비교할 수 있습니다. 동일한 해시 코드, 매번 (앱 도메인, 앱 재시작, 시간, Jupiters 달 정렬 등에 상관없이). " 그건'GetHashCode'와 섞이지 않습니다. 'GetHashCode'의 구현은 대개 CLR의 버전과 목성의 달에 의존하지 않고 변경 될 수 있습니다. 그러나 원칙적으로 그렇게 할 수도 있습니다. – CodesInChaos