Delphi: проверьте, уникальны ли значения в массиве (или значения переменных) одновременно

Мне нужно проверить, являются ли значения некоторых переменных уникальными. Это образец/пример для 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;

В современном Delphi есть класс HashSet. Таким образом, можно добавить значения в хэш-карту и проверить ее длину. Если длины равны, то все значения уникальны.

Old Skull 24.07.2024 07:20
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
1
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Такую функцию можно было бы просто записать так:

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; Выход; конец;'

kwadratens 23.07.2024 13:28

ХОРОШО. Вы даже можете установить Result := False; вначале и использовать простой Exit; в цикле.

Uwe Raabe 23.07.2024 13:55

Да, это лучшее решение!

kwadratens 23.07.2024 16:08

Другие вопросы по теме