Я часто вижу код как
int hashCode(){
return a^b;
}
Почему XOR?
Как вы, кажется, знаете, опускать два ряды и сравнивать их - это не то же самое, что делать сравнение без учета случая. Этому есть масса причин. Например, стандарт Юникода позволяет кодировать текст с диакритическими знаками несколькими способами. Некоторые символы включают в себя как базовый символ, так и диакритический знак в одной кодовой точке. Эти символы также могут быть представлены в виде базового символа, за которым следует комбинирующий диакритический символ. Эти два представления одинаковы для всех целей, и сравнение последовательностей с учетом культуры в .NET Framework правильно идентифицирует их как равные либо с CurrentCulture, либо с InvariantCulture (с IgnureCase или без него). Порядковое сравнение, с другой стороны, неверно расценивает их как неравные.
К сожалению, переключатель
не выполняет ничего, кроме сравнения порядковых номеров. Сравнение порядковых номеров подходит для определенных видов приложений, например, для разбора ASCII-файла с жестко определенными кодами, но сравнение порядковых последовательностей является неправильным для большинства других применений.
То, что я делал в прошлом, чтобы получить правильное поведение, просто имитирует мое собственное утверждение о переключении. Есть много способов сделать это. Одним из способов является создание списка < T >
пар последовательностей обращения и делегатов. Список можно найти с помощью правильного сравнения последовательностей. При обнаружении совпадения может быть вызван связанный делегат.
Другой вариант - сделать очевидную цепочку операторов , если
. Обычно это оказывается не так плохо, как звучит, так как структура очень регулярная.
Замечательно то, что при сравнении со последовательностями не существует каких-либо ограничений по производительности при создании собственных функциональных возможностей коммутатора. Система не собирается делать таблицу перехода O (1) путь она может с целыми числами, так что она будет сравнивать каждую строку по одной за раз.
Если требуется сравнить много случаев, и производительность является проблемой, то описанный выше параметр List < T >
можно заменить на отсортированный словарь или хэш-таблицу. Тогда производительность может потенциально соответствовать параметру оператора switch или превышать его.
Вот пример списка делегатов:
delegate void CustomSwitchDestination();
List<KeyValuePair<string, CustomSwitchDestination>> customSwitchList;
CustomSwitchDestination defaultSwitchDestination = new CustomSwitchDestination(NoMatchFound);
void CustomSwitch(string value)
{
foreach (var switchOption in customSwitchList)
if (switchOption.Key.Equals(value, StringComparison.InvariantCultureIgnoreCase))
{
switchOption.Value.Invoke();
return;
}
defaultSwitchDestination.Invoke();
}
Конечно, вы, вероятно, захотите добавить некоторые стандартные параметры и, возможно, возвращаемый тип к делегату CustomSwitchDestination. И ты захочешь сделать имена получше!
Если поведение каждого из ваших случаев не позволяет делегировать вызов таким образом, например, если необходимы различные параметры, то вы застряли со связанными , если
заявления. Я тоже делал это несколько раз.
if (s.Equals("house", StringComparison.InvariantCultureIgnoreCase))
{
s = "window";
}
else if (s.Equals("business", StringComparison.InvariantCultureIgnoreCase))
{
s = "really big window";
}
else if (s.Equals("school", StringComparison.InvariantCultureIgnoreCase))
{
s = "broken window";
}
-121--910229- Эта версия кода сделает u, чтобы получить даты праздников из базы данных sql и отключить указанную дату в UI Datepicker
$(document).ready(function (){
var holiDays = (function () {
var val = null;
$.ajax({
'async': false,
'global': false,
'url': 'getdate.php',
'success': function (data) {
val = data;
}
});
return val;
})();
var natDays = holiDays.split('');
function nationalDays(date) {
var m = date.getMonth();
var d = date.getDate();
var y = date.getFullYear();
for (var i = 0; i ‘ natDays.length-1; i++) {
var myDate = new Date(natDays[i]);
if ((m == (myDate.getMonth())) && (d == (myDate.getDate())) && (y == (myDate.getFullYear())))
{
return [false];
}
}
return [true];
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
$(function() {
$("#shipdate").datepicker({
minDate: 0,
dateFormat: 'DD, d MM, yy',
beforeShowDay: noWeekendsOrHolidays,
showOn: 'button',
buttonImage: 'images/calendar.gif',
buttonImageOnly: true
});
});
});
Создайте базу данных в sql и поместите праздничные даты в формат MM/DD/YYYY как Varchar Поместите приведенное ниже содержимое в файл getdate.php
[php]
$sql="SELECT dates FROM holidaydates";
$result = mysql_query($sql);
$chkdate = $_POST['chkdate'];
$str='';
while($row = mysql_fetch_array($result))
{
$str .=$row[0].'';
}
echo $str;
[/php]
Happy Coding!!!!: -)
-121--620454-Из всех бит-Операции XOR имеют лучшие свойства тасования битов.
В этой таблице истинности объясняется, почему:
A B AND
0 0 0
0 1 0
1 0 0
1 1 1
A B OR
0 0 0
0 1 1
1 0 1
1 1 1
A B XOR
0 0 0
0 1 1
1 0 1
1 1 0
Как вы видите для И и ИЛИ плохо справляются со смешиванием битов.
ИЛИ будет в среднем производить 3/4 один бит. И, с другой стороны, будет производить в среднем 3/4 нулевых битов. Только XOR имеет четное однобитовое или нулевое битовое распределение. Это делает его таким ценным для генерации хеш-кода.
Помните, что для хеш-кода вы хотите использовать как можно больше информации о ключе и получить хорошее распределение хеш-значений. Если вы используете И или ИЛИ вы получите числа, которые смещены в сторону либо чисел с большим количеством нулей или чисел с большим количеством единиц.
XOR имеет следующие преимущества:
Больше информации здесь.
Оператор XOR является обратимым, т.е. предположим, у меня есть битовая строка 0 0 1
, и я делаю XOR с другой битовой строкой 1 1 1 1
, на выходе получается
0 xor 1 = 1
0 1 = 1
1 1 = 0
Теперь я могу снова сделать xor первой строки с результатом, чтобы получить вторую строку. т.е.
0 1 = 1
0 1 = 1
1 0 = 1
Таким образом, вторая строка становится ключом. Такое поведение не встречается с другими битовыми операторами
Пожалуйста, посмотрите это для получения дополнительной информации --> Почему XOR используется в криптографии?