![]() |
¿Como recorrer un conjunto?
Buenas foristas...
Esta pregunta es, segurísimo, una tontera (y me siento como un tarado con sólo preguntarla) pero no le encuentro vuelta. La situación es esta: manejos de conjuntos y tipos enumerados. Bueno, tengo un tipo enumerado: // Si bien los nombres no son esos... el ejemplo es válido TEnum = (eUno = 1, eDos = 2, eTres = 3, eCuatro = 4,... eOcho = 8); TSetEnum = set of TEnum. Hasta alli se entiende. Tengo un procedimiento que debe recibir como parámetro un TSetEnum, y por cada elemento del conjunto debo realizar operaciones, que si bien son similares... debo ir manteniendo dicha sumatoria. Es decir, sumar todos los resultados. La pregunta es: ¿Cómo puedo recorrer el conjunto y dependiendo del valor que vaya leyendo hacer la operatoria indicada?Es decir lo que quiero conseguir es:
Lo que se pretende conseguir es que el usuario ingrese una cantidad arbitraria de operaciones (es por eso el TSetEnum). Y que se regrese el resultado. Ha decir verdad... ha pesar de haber trabajado con conjuntos (no mucho... pero algo), nunca tuve que recorrerlo... Estaba pensando en la posibilidad de usar un array dinámico, pero no le veo sentido usar un array (crearlo, liberarlo, darle tamaño)... si a lo mejor se puede hacer con un simple conjunto. Claro está... que si el conjunto se ingresa vacio no se hace nada. Me puse a ver la ayuda (y vaya que es escasa) y no encontré algo que me diga como se podría recorrer un conjunto. Me he enterado por gente de Sam Sistemas (representantes de Borland en Argentina) que me comentaban que en la versión 2006 se puede hacer un:
Pero... ¡porqué no lo pusieron antes!:mad: Espero no haber dicho algo tonto... Saludos, |
:confused: Estoy confundido. En un conjunto no puede haber un elemento repetido, es decir:
Así que no entiendo para que necesitas un bucle, algo así serviría:
Puede que tu estés confundiendo un conjunto con un array o una lista. |
// Saludos |
Lo que has dicho no es ninguna tontería, de hecho no tiene solución inmediata.
Para poder usar esto, no puede haber saltos en el tipo Enum, es decir: no puedes dar valores no consecutivos a los índices, normalmente se hace así: así el compilador le dará valores correlativos sin saltos. Después puedes usar algo así: El conjunto no puedes recorrerlo, como mucho, puedes recorrer el tipo enumerado. EDITO: román, ¿no deberías estar ya en la cama? :D :D ;) Saludos |
Cita:
// Saludos |
Gracias seoane, roman y Lepe por responder.
Conque el culpable era Low() yHigh().... ¡ya se las veran conmigo esos dos!:D ¡No sabía que pdían usarse para los tipos enumerados! Me he cansado de emplearlos en arrays dinámicos y ni se me ocurrió intentarlo ahora.... Veré que tal me sale ahora. Cita:
seoane, el código que me envias es precisamente lo que me quería evitar... imaginate un conjunto con 10, 20, 100 elementos... Y sabiendo que las operaciones son similares, con más razón. gracias a todos por brindar su ayuda. Saludos, |
Cita:
Creo recordar que al incluir un salto, después no permitía hacer algo en especial, jo.... esto no es serio :D Está claro que si incluimos un salto, después no podemos hacer cosas de este estilo: ...pero no iba por ahí la cosa, había algo más... creo recordar se trataba de esto: ... no sé, de hecho tomé la decisión hace tiempo de no incluir saltos en los tipos Enum, pero no recuerdo el por qué :confused: Saludos |
Creo que a partir de delphi 2005 se puede usar la clausula 'in' dentro del for, que resulta más cómoda. Yo uso delphi 7, así que mejor que alguien te confirme esto.
|
Cita:
estamos declarando más de lo que se ve, como puede observarse si hacemos:
En otras palabras, TEnum no es más que el intervalo
con nombres especiales para el 1, 2, 3, 4 y 8 pero no para el 5, 6 y 7. Y claro que en un arreglo como el que pones, esto sería particularmente raro porque se trata de un arreglo con más elementos de los que aparentemente tendría. // Saludos |
La franja horaria es GMT +2. Ahora son las 00:44:42. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi