PDA

Ver la Versión Completa : Buscar un elemento en un array sin recorrerlo


David
28-06-2007, 20:40:19
Hola

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

Primera opción :


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) ;

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
Saludos.

Yo hice algo parecido de la siguiente forma


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



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.