Ver Mensaje Individual
  #10  
Antiguo 27-10-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Delfino.

Coincido con lo dicho por mamcx y roman sobre la consecutividad de los elementos, de no ser así hay que recorrerlos.

También muy acertada la pregunta de Casimiro. Si se trata de tipos enumerados de elementos consecutivos y siendo divisible en subconjuntos, podrías hacer:
Código Delphi [-]
type
  TEnum = Byte;
  TSet  = set of TEnum;

function GetPosEnum(const aSet: TSet; const aEnum: TEnum; const aPaso: Byte): Integer;
begin
  if not(aEnum in aSet) then
    Result := -1
  else if Ord(aEnum) mod aPaso = 0 then
    Result := aPaso
  else
    Result := Ord(aEnum) mod aPaso;
end;

Ejemplo de uso:
Código Delphi [-]
...
var
  s : TSet;
  e : TEnum;
  n : Integer;
begin
  s := [1,2,3,4,5,6,7,8,9,10,11,12];
  e := 11;

  n := GetPosEnum(s, e, 4); // (3 subconjuntos de 4 elementos)
  if n <> -1 then
    ShowMessage(Format('Posición de %d: %d',[e, n])) // Posición de 11: 3
  else
    ShowMessage('valor no encontrado')
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 27-10-2015 a las 00:16:24.
Responder Con Cita