Как создать случай нечувствительный TEqualityComparer для TDictionary?

Вы также можете JAR-файлы классов, которые вы хотите добавить, и добавить JAR-файл в зависимости от сборки. Для меня это самое чистое решение. Конечно, внутренне JAR-файл должен иметь правильную структуру каталогов.

Щелкните правой кнопкой мыши в своем проекте и выберите Java Build Path, чтобы добавить новые зависимости.

Копирование в папку bin не будет работать очень хорошо, потому что оно предназначено для хранения результатов скомпилированных источников. Как только вы очистите что-нибудь, файл исчезнет.

10
задан Chau Chee Yang 23 October 2009 в 06:11
поделиться

2 ответа

Спасибо. Я изменил TCustomEqualityComparer.GetHashCode, и он работает так, как вы сказали:

function TCustomEqualityComparer.Equals(const Left, Right: string): Boolean;
begin
  {$IFDEF UNICODE }
    Result := (Left.ToUpper = Right.ToUpper);
  {$ELSE }
    Result := SameText(Left, Right);
  {$ENDIF }
end;

function TCustomEqualityComparer.GetHashCode(const Value: string): Integer;
var s: string;
begin
  s := {$IFDEF UNICODE } Value.ToUpper {$ELSE } UpperCase(Value) {$ENDIF };
  Result := BobJenkinsHash(s[1], Length(s) * SizeOf(s[1]), 0);
end;
2
ответ дан 3 December 2019 в 19:34
поделиться

HashCode должен быть одинаковым для всех значений, возвращающих Equals = true! Попробуйте сделать значение Value в GetHashCode заглавным, прежде чем отправлять его в HashFunction.

3
ответ дан 3 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

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