Вы также можете написать так же
$(function() {
$("#checkbox-toggle").click(function() {
$('input[type=checkbox][name=checkbox_id\\[\\]]').click();
});
});
Просто нужно вызвать событие щелчка для флажка, когда пользователь нажимает кнопку с идентификатором «# checkbox-toggle».
Основные принципы указаны от Марка и Джона неплохие, но они далеки от оптимальности с точки зрения равномерности распределения результатов. К сожалению, подход «умножения на простые числа», скопированный таким количеством людей из Knuth, не лучший выбор во многих случаях лучшего распределения можно добиться за счет более дешевых вычислений функций (хотя это очень немного на современном оборудовании). На самом деле использование простых чисел во многих аспектах хеширования не панацея .
Если эти данные используются для хэш-таблиц значительного размера, я рекомендую прочитать Bret Mulvey '
Хэши не предназначены для уникальности - они просто предназначены для хорошего распределения в большинстве ситуаций. Они просто должны быть последовательными. Обратите внимание, что переполнение не должно быть проблемой.
Простое добавление, как правило, не является хорошей идеей, а разделение - определенно нет. Вот подход, который я обычно использую:
int result = 17;
foreach (string item in collection)
{
result = result * 31 + item.GetHashCode();
}
return result;
Если вы в противном случае находитесь в проверяемом контексте, вы можете намеренно снять его.
Обратите внимание, что это предполагает, что порядок важен, то есть что {"a", "b"} должны отличаться от { "б", "а"}. Сообщите нам, если это не так.
В этом подходе нет ничего плохого при условии, что участники, чьи хэш-коды вы комбинируете, соблюдают правила хэш-кодов. Вкратце ...
Если порядок элементов не важен (т. Е. {"A", "b"} совпадает с {"b", "a"}), вы можете использовать исключительный или для объединения хеш-кодов:
hash ^= item.GetHashCode();
[Изменить: как Марк указал в комментарии к другому ответу, у этого есть недостаток, заключающийся в том, что для таких коллекций, как {"a"} и {"a", "b", "b"} один и тот же хэш-код .]
Если порядок важен, вы можете вместо этого умножить на простое число и добавить:
hash *= 11;
hash += item.GetHashCode();
(При умножении вы иногда получаете переполнение, которое игнорируется, но при умножении на простое число вы теряете минимум Если вы вместо этого умножите на число, например 16, вы потеряете четыре бита информации каждый раз, поэтому после восьми элементов хэш-код из первого элемента полностью исчезнет.)