Hola Danielmj
El error te lo da por la pre-condición establecida donde estas debe tener siempre 5 elementos a la hora de leerla, puedes quitar esa condición, o añadirle otras que tu consideres.
Código Delphi
[-]
const
MaxCount: integer = 5;
...
function TCombinacionHelper.load(list: array of Byte): boolean;
var
i: LongInt;
begin
Result := False;
clear;
for i := 0 to High(list) do
AddNumero(list[i]);
Result := true;
end;
Cita:
Empezado por danielmj
...
lo que intento es por ejemplo generar x numero de combinaciones repetidas y metidas en un listview, de ella extraigo los numeros mas repetidos y sobre esa unica combinacion, hago las comparaciones.
|
Para operar olvídate del listview, (al fin y al cabo mostrar 5000 o 10000 combinaciones la mayoría inutiles no le es interesante al usuario) usalo solamente una vez que tengas los resultados esperados con las combinaciones ya filtradas. Ademas al ser un componente visual no obtendrás la velocidad adecuada. Haz las operaciones sobre array que es mucho mas rápido. aquí tienes un ejemplo:
Código Delphi
[-]
var
i:longint;
combinacion1, comunes:Tcombinacion;
cs1: string;
lista: array of TCombinacion;
begin
try
setLength(lista, 5000);
for i:=0 to high(lista) do
lista[i].aleatorio;
if not Combinacion1.load([1, 45, 33, 14, 20, 22]) then begin
MessageDlg('La combinacion no es valida!!!', mtError, [mbOK], 0);
exit;
end;
cs1 := Combinacion1.AsString;
for i := 0 to high(lista) do begin
comunes := lista[i].comparar(Combinacion1);
if comunes <> 0 then
memo1.Lines.Add(cs1 + #9 + lista[i].AsString + #9 + '(' + IntToStr(comunes.count) + ') ' + comunes.AsString);
end;
finally
setLength(lista, 0);
end;
Un saludo