I want to iterate through a set of specific values. Simple example below
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.
The sample code here does what I expect and produces the following
Iteration = 1, value = 1
Iteration = 2, value = 5
Iteration = 3, value = 10
Iteration = 4, value = 20
Now if I change the order of the set
for b in [20,10,5,1] do
The output is the same as the original, that is the order of the values is not preserved.
What is the best way to implement this?
Sets are not ordered containers. You cannot change the order of a set's contents. A for-in loop always iterates through sets in numerical order.
If you need an ordered list of numbers, then you can use an array or 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.
You can declare a constant array instead of a constant set.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With