Я работаю над учебным пособием по быстрому Tetris для iOS *, и оно завершено и работает. Но меня озадачивает один конкретный аспект — протокол Hashable. Функция:
class Block: Hashable, Printable {
[...]
var hashValue: Int { return self.column ^ self.row }
Строки идут 0..9, а столбцы 0..20. В примечаниях об этой функции говорится: «Мы возвращаем исключающее ИЛИ наших свойств строки и столбца, чтобы сгенерировать уникальное целое число для каждого блока». Но я понимаю, что 0 ^ 1 будет таким же, как 1 ^ 0 и т. д. Я хотел бы знать, является ли это проблемой, если хэш-функция не уникальна, как эта, или коллизии обычно в порядке? Как я уже сказал, приложение работает нормально...
*https://www.bloc.io/tutorials/swiftris-build-your-first-ios-game-with-swift#!/chapters/681