Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 21-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por cHackAll
Esa idea esta super, lastimosamente debes llamar a un procedimiento de ordenamiento, un QuickSort pues la VCL no ordena por Objects , pero con eso ya estaríamos... la busqueda se vuelve más eficiente.
Creo que no me expliqué bien. Se trata de usar el ID para ordenar en la segunda lista (ID como String) y usar así búsqueda dicotómica/binaria sobre la segunda lista (auxiliar) y cada ID de la segunda lista apunta a la posición correspondiente de la primera "Buscar_ datos_ con_ listas_ ordenadas.zip"

He usado 25000 líneas para maximizar los resultados y he realizado las búsquedas utilizando las dos formas; La inicial (secuencial) y usando dos listas para obtener búsqueda dicotómica.

Sorpredentemente al buscar un único elemento, casi no se aprecia, lo que significa que la secuencial se hace más rápido de lo que yo pensaba; Ahora, si el proceso se maximiza (por ejemplo haciendo 1000 búsquedas seguidas) la diferencia es apreciable (más que apreciable).

Revisad el código si queréis, veréis que la diferencia para usar la lista auxiliar son unas pocas líneas.

La diferencia está en usar:

Código Delphi [-]
    if (j > 0) then begin
      ListBox1.Items.Add(ADOTable1.FieldByName('Nombre').AsString + ' - '  +
                         ADOTable1.FieldByName('Direccion').AsString + ' - ' +
                         IntToStr(j));
      ListBox1.Items.Objects[i] := pointer(j);
    end;

o esto:

Código Delphi [-]
if (j > 0) then begin
      Index := ListBox1.Items.Add(ADOTable1.FieldByName('Nombre').AsString + ' - '  +
                         ADOTable1.FieldByName('Direccion').AsString + ' - ' +
                         IntToStr(j));
      ListBox1.Items.Objects[i] := pointer(j);

      // Añadimos a la segunda lista
      Index2 := _ListID.Add(IntToStr(j {ID}));
      _ListID.Objects[Index2] := Pointer(Index);
    end;

Link al ejemplo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 21-06-2007 a las 12:10:15. Razón: Corregido el link
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
.txt a listbox molinero1 Varios 3 26-04-2007 15:03:07
busqueda dentro de en un listbox Max_E. Varios 7 01-10-2006 07:51:52
listbox gsilvei Varios 2 06-09-2006 04:20:44
Uso de ListBox Luli Varios 3 14-04-2005 19:26:30
listbox cesarjbf OOP 1 16-10-2003 13:17:21


La franja horaria es GMT +2. Ahora son las 19:27:45.


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
Copyright 1996-2007 Club Delphi