Delphi for..in loop установить порядок перечисления
Я хочу перебрать набор определенных значений. Простой пример ниже
program Project1;
{$APPTYPE CONSOLE}
var
a, b: word;
wait: string;
begin
a := 0;
for b in [1,5,10,20] do
begin
a := a + 1;
writeln('Iteration = ', a, ', value = ', b);
end;
read(wait);
end.
пример кода здесь делает то, что я ожидаю, и производит следующее
итерация = 1, значение = 1
итерация = 2, значение = 5
итерация = 3, Значение = 10
итерация = 4, значение = 20
теперь, если я изменю порядок набора
for b in [20,10,5,1] do
выход такой же как оригинал, то есть порядок значения не сохраняются.
каков наилучший способ реализовать это?
3 ответов
наборы не заказывала контейнеры. Нельзя изменить порядок содержимого набора. Цикл for-in всегда перебирает множества в численном порядке.
Если вам нужен упорядоченный список чисел, то можно использовать массив или TList<Integer>
.
var
numbers: array of Word;
begin
SetLength(numbers, 4);
numbers[0] := 20;
numbers[1] := 10;
numbers[2] := 5;
numbers[3] := 1;
for b in numbers do begin
Inc(a);
Writeln('Iteration = ', a, ', value = ', b);
end;
end.
вы можете объявить постоянный массив вместо постоянного набора.
program Project1;
{$APPTYPE CONSOLE}
var
a, b: word;
wait: string;
const
values: array[0..3] of word = (20,5,10,1);
begin
a := 0;
for b in values do
begin
a := a + 1;
writeln('Iteration = ', a, ', value = ', b);
end;
read(wait);
end.
в математике множество не имеет определенного порядка.
в pascal набор является bitmap
в памяти представление элементов, присутствующих в наборе (в пределах Вселенной возможных элементов, определенных базовым типом).
вы не можете "изменить" порядок набора, потому что он по определению бессмыслен для него.
как представление в памяти pascal, набор всегда повторяется "по порядку".