Мне нужно проверить, являются ли значения некоторых переменных уникальными. Это образец/пример для 4 переменных, но я ищу что-то универсальное, чтобы оно работало с 3, 5 и т. д. переменными. Я могу написать код, сравнивающий переменные, например:
var
A, B, C, D : Integer;
begin
...
if (A <> B) and (B <> C) and (C <> B) and ... then
ShowMessage('are unique');
end;
Есть ли более короткий способ сравнить все значения? Я имею в виду что-то вроде:
var
A, B, C, D : Integer;
begin
...
if UniqueValues([A, B, C, D]) then
ShowMessage('are unique');
end;
Такую функцию можно было бы просто записать так:
function UniqueValues(const Values: array of Integer ): Boolean;
var
I: Integer;
J: Integer;
begin
for I := Low(Values) to High(Values) - 1 do
for J := I + 1 to High(Values) do
if Values[I] = Values[J] then
Exit(False);
Result := True;
end;
Отлично, это работает! Я действительно надеялся, что есть какая-то встроенная функция. Добавлю только, что у меня старая версия Delphi и "Exit(False);" команду, ее необходимо заменить на 'begin Result := False; Выход; конец;'
ХОРОШО. Вы даже можете установить Result := False;
вначале и использовать простой Exit;
в цикле.
Да, это лучшее решение!
В современном Delphi есть класс HashSet. Таким образом, можно добавить значения в хэш-карту и проверить ее длину. Если длины равны, то все значения уникальны.