GetHashCode () только для логических значений - PullRequest
10 голосов
/ 26 июля 2011

У меня есть неизменный класс, единственным полем которого является bool[] (размер определяется во время выполнения).

Как я могу вычислить хороший хэш-код этого класса? Обычно я просто вызываю GetHashCode() для каждого поля и объединяю их с одним из этих операторов: + | &, но поскольку единственно возможными хеш-кодами являются 0 для false и 1 для true, это на самом деле никуда меня не приведет. Моя реализация должна работать только с bools и должна работать с массивом произвольного размера.

(Возможно, это не имеет большого значения, но я кодирую в C # /. NET.)

Ответы [ 2 ]

10 голосов
/ 26 июля 2011

Предполагая, что ваш bool[] назван bools:

unchecked { 
    int hash = 17;
    for(int index = 0; index < bools.Length; index++) {
        hash = hash * 23 + bools[index].GetHashCode();
    }
    return hash;
}
0 голосов
/ 23 декабря 2013

Простой bools.GetHashCode() работает нормально, пока вы не обеспокоены производительностью (в этом случае используйте решение Джейсона).

...