У меня есть функция, которая получает три разных объекта "люди" и генерирует новый объект "совместимость" на основе объединенных значений в объектах "люди".
Однако примерно в 1/3 времени три объекта "люди", которые он получает в качестве входных данных, являются такими же, как и прежде, хотя, возможно, в другом порядке. В этих случаях я НЕ хочу создавать новый объект «счет», а просто возвращаю значение, содержащееся в существующем объекте.
Первоначально программа просто просматривает список <> объектов «совместимости», ища тот, который принадлежит этим трем «людям» (поскольку каждый объект «совместимости» содержит массив объектов людей). Этот метод очень медленный, учитывая, что существует более тысячи объектов «совместимости» и более миллиона объектов «людей».
У меня была идея использовать словарь, где ключ - это число, которое я сгенерировал, скомбинировав значения идентификаторов объектов трех человек в один UInt64 с использованием XOR, и сохранив объекты партитуры в виде значений словаря, а не в списке. Это сокращает время примерно вдвое и является приемлемым с точки зрения производительности по времени, но слишком много коллизий и слишком часто возвращает неправильный результат.
Буду очень признателен за любые предложения или указатели.
Редактировать: Чтобы добавить к исходному вопросу, у каждого объекта "люди" есть куча других полей, которые я мог бы использовать, но проблема в том, чтобы сделать ключ УНИКАЛЬНЫМ и КОММУТАТИВНЫМ.