170 похожих чатов

Гарантирует ли HashCode.Combine order invariant, когда результат от изменения порядка

аргументов не зависит?

13 ответов

6 просмотров
Ivan-Balanar Автор вопроса

Upd: нет, не гарантирует. даже Combine (1,2) отличается от Combine(2,1).

Конечно, это бы поломало гарантии по коллизиям. Order invariant это по сути эквивалент аддитивности, или xor

Ivan-Balanar Автор вопроса
George Polevoy
Конечно, это бы поломало гарантии по коллизиям. Or...

а разве xor теперь антипаттерн для GetHashCode?

Ivan Balanar
а разве xor теперь антипаттерн для GetHashCode?

Ты в xor снижаешь кардинальность множества с условной бесконечности до 2^32

Ivan Balanar
приемлемо (с)

Короче, если у тебя эквивалентность сета, то норм, если ключи, где коллекция в разном порядке разные считаются разными, то нет.

Ivan Balanar
а разве xor теперь антипаттерн для GetHashCode?

Это в смысле получить хеш-код = перексорить хеш-коды полей? Всегда им был

Ivan-Balanar Автор вопроса
George Polevoy
Ты в xor снижаешь кардинальность множества с услов...

То есть не совсем так. Предположим, у тебя есть N элементов, из которых тебе нужно составить коллекцию из k елементов. У тебя есть CnK сочетаний, и K! перестановок в каждом сочетании. Если ты делаешь XOR, то получаешь CnK вариантов хэшкода на все свое множество ключей. Если делаешь HashCode.Combine, то получаешь на K! больше сочетаний. Плюс к этому, сам XOR каким-то образом подубъет количество хэшкодов среди этих CnK комбинаций, чтобы точно понять, нужно применить теорию вероятности и фактически просчитать это с учетом взаимодействия 32 битов. Я думаю, что количество комбинаций очень сильно сократится. Попробуй просчитать. В принципе довольно легко написать тестовую обвязку и прямо посмотреть, сколько уникальных хэшкодов ты получаешь тем или иным методом в среднем. Бабкина мудрость в том, что XOR не работает. Надо более досконально изучать.

Ivan-Balanar Автор вопроса
George Polevoy
То есть не совсем так. Предположим, у тебя есть N ...

у меня коллекции с менее чем сотней элементов. Думаю, это избыточно.

Ivan Balanar
у меня коллекции с менее чем сотней элементов. Дум...

если у тебя в коллекции элементы <100 то будет не очень

Ivan-Balanar Автор вопроса
Ilya Chernoudov
если у тебя в коллекции элементы <100 то будет не ...

Все так, да. Но это уже хорошо известные частности об особенностях чисто числовых коллекций. У меня коллекция объектов.

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта