Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Buscar un elemento en un array sin recorrerlo (https://www.clubdelphi.com/foros/showthread.php?t=45317)

David 28-06-2007 20:40:19

Buscar un elemento en un array sin recorrerlo
 
Hola

Quiero encontrar un elemento en un array , pongo dos posibilidades , me interesa sobremanera saber la primera .

Primera opción :

Código Delphi [-]
var
miarray : array[0..n] of integer;
begin
 // Los valores dados al array no van a estar nunca repetidos
 miarray[0] := 12;
 miarray[1] := 14;
 miarray[5] := 2;
..................
 miarray[n] := X;

For i:= 0 to LastMilista do
begin
   //quiero saber , si un número esta en el array , sin tener que hacer esto :
    for j:=0 to high(miarray) do // esto son demasiados pasos , pregunto por algo más directo
     if i = miarray[j] then
end;
end;


Ahora pongo la segunda opción (esta es menos importante) ;
Código Delphi [-]
type
TRegistro = record;
articulo : string;
campo2: integer;
...
end;

implementation

procedure TForm1.Loquesea;
var
 PRegistro : array[0..n] of TRegistro;
miarticulo : string;
begin
PRegistro[0].Articulo := 'xxxx';
...........
Pregistro[n].Articulo := 'zzzz';

while not MilistaArticulos.eof do
begin
if miarticulo = ¿? then // Aquí que código pongo para ver si esta en el array y saber que posición del array es,en el anterior caso no pregunto la posición del array sólo saber si esta.
end;
end;


Un saludo

eduarcol 28-06-2007 21:12:56

Y porq no utilizas un stringlist, puedes apoyarte en el metodo IndexOf

courtois 30-06-2007 10:35:32

¿el stringlist no va a recorrerse para encontrar el valor? en el caso del array, si lo ordenas con un metodo como quicksort o heapsort y usas un algoritmo de busqueda por selección o busqueda binaria, no será necesario recorrerlo por completo para encontrar el valor y será mas "directo"

manuFP 23-07-2011 16:15:40

Yo hice algo parecido de la siguiente forma...
 
Saludos.

Yo hice algo parecido de la siguiente forma

Código Delphi [-]
 
function buscacodigo(codigo:integer;Lista:Array [1..n] of integer):integer;
 
var contador : integer
 
begin
contador:=0;
while not ((Lista[contador]=codigo) or (contador>n)) do
begin
if lista[contador]=codigo then result:= contador;
inc(contador);
end;
end;




Bueno realmente había declarado anteriormente un tipo array y después le pasaba a la función la variable de dicho tipo... esto es


Código Delphi [-]
 
type 
TLista = array [1..250] of integer;
 
var Lista : TLista;




A continuación pasaba a la función los 2 parámetros y finalmente el resultado de la función es el que buscas.
Con esta función te evitas pasar todo el array, ya que en el mismo momento en el que lo encuentre saldrá del bucle.

Espero que te sirva.
Saludos.


La franja horaria es GMT +2. Ahora son las 03:30:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi