Quiero para iterar a través de un conjunto de valores específicos. Simple ejemplo de abajo

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.

El código de ejemplo que aquí se hace lo que se espera y se produce el siguiente

Iteración = 1, valor = 1

Iteración = 2, valor = 5

Iteración = 3, valor = 10

Iteración = 4, el valor de = 20

Ahora si puedo cambiar el orden de la serie

  for b in [20,10,5,1] do

La salida es el mismo que el original, que es el orden de los valores no se conserva.

¿Cuál es la mejor manera de implementar esto?

OriginalEl autor HMcG | 2011-02-09

3 Comentarios

  1. 18

    Conjuntos no están ordenadas contenedores. Usted puede cambiar el orden de un conjunto de contenidos. Un para-en el bucle siempre se itera a través de los conjuntos en orden numérico.

    Si usted necesita una lista ordenada de números, entonces usted puede utilizar una matriz o 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.
    por ejemplo, for b in TIntegerDynArray.Create(20,10,5,1) do
    Gracias por la respuesta. Hay menos de largo aliento para crear el arreglo ordenado de los valores? Y el comentario sobre las respuestas que demasiado. A veces StackOverflow es demasiado rápida 🙂
    La dinámica de la-matriz-constructor de la sintaxis que David demuestra es más reciente que la de-en el bucle. Hay algunas versiones de Delphi que puede utilizar el último, pero no el primero, y si usted está utilizando uno de esos, entonces no hay mucho que usted puede hacer. Quizás podría escribir su propia función que convierte un vector abierto en una matriz dinámica.
    Hefferman – gracias, eso es una muy buena solución, y también supera los límites de un conjunto (bytes sólo parece, incluso en DXE).
    Se remonta por lo menos tan lejos como D2007, aunque. No estaba en D7, no creo. (Sólo para darle a la gente una idea del tiempo aproximado que apareció; no corregir tu post o comentario.)

    OriginalEl autor Rob Kennedy

  2. 11

    Puede declarar una matriz constante en lugar de una constante 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.
    Otra buena aplicación, y no depender de otras unidades. Gracias.

    OriginalEl autor RichardTheKiwi

  3. 5

    En matemáticas, un conjunto no tienen ningún orden en particular.

    En pascal, un conjunto es una bitmap en la memoria de la representación de los elementos presentes en el juego (dentro de un universo de posibles elementos definidos por el tipo base).

    No hay manera de que usted puede «cambiar» a la orden de un conjunto, porque es, por definición, carece de sentido para él.

    Como en la memoria de la representación por pascal, el conjunto siempre es iterado «en orden».

    gracias por la explicación. Debo admitir que no me había dado cuenta de que es, como usted dice , una asignada a la representación de los valores – que también explica por qué los valores duplicados no tienen ningún efecto – que el valor está ya representada.

    OriginalEl autor jachguate

Dejar respuesta

Please enter your comment!
Please enter your name here