Вы, кажется, ошиблись, полагая, что строки Delphi не содержат реализацию хеш-кода по умолчанию.
Это не так.Когда вы создаете TDictionary
со строковым значением в качестве ключа, хэш вычисляется на основе содержимого строки.Если Value
является строковой переменной, то код выглядит следующим образом:
BobJenkinsHash(Value[1], Length(Value) * SizeOf(Value[1]), 0);
Я думаю, что это отвечает на часть вашего вопроса, касающегося хеширования строк.
Комментарии кдругие ответы, и те, которые я удалил, были интересным обсуждением проблемы дизайна, которую вы рассматриваете.Я по-прежнему скептически отношусь к вашей уверенности в том, что правильное решение состоит в том, чтобы разрешить отношения «один к одному» между экземплярами TVehicle и VIN.
Вы подтвердили, что у вас не должно быть нескольких экземпляров TVehicle с одинаковым VIN,разные данные.Мне кажется, что лучший способ добиться этого - убедиться, что у вас есть отношения один-к-одному между экземплярами TVehicle и VIN.
Эти отношения один-к-одному довольно легко достичь.Вам нужно сделать экземпляры экземпляров TVehicle функцией, частной для класса фабрики.Этот фабричный класс содержит словарь, содержащий существующие экземпляры транспортных средств, TDictionary<string,TVehicle>
.Если вам нужно завладеть транспортным средством, обратитесь за консультацией к производителю.Он возвращает либо существующий, который был расположен в его словаре, либо синтезирует новый.
Нет никаких сомнений в ряде других способов достижения этого эффекта, но я настоятельно призываю вас рассмотреть подход, которыйВ результате получается только один экземпляр транспортного средства на VIN.