![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
|||
|
|||
|
¿Qué ventajas tiene? En este caso en concreto solo necesitamos la lista para mantener una referencia para luego poder "cargarnos" las imágenes y evitar así que se dupliquen en una operación posterior.
|
|
#2
|
||||
|
||||
|
Muy buen apunte seoane pero para localizar un Objeto en el TObjectList podríamos usar el
que trae el TObjectList y en ese caso ¿no seria igual de efectivo buscar un objecto en un TObjectList que en un TStringList?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
|
#3
|
||||
|
||||
|
Cita:
|
|
#4
|
||||
|
||||
|
Se que como parámetro hay que pasarle un Objeto y al de el TStringList un string pero lo que trato de preguntar es ¿Que tan rápido(Eficiente) es buscar la posición de un objeto con este método? ¿Es igual de rápido que buscar el nombre de un objeto en un TStringList?
Pregunto esto porque si la respuesta es positiva, me parecería que en ultimas el TStrinList no terminaria siendo la mejor opción para ninguno de los dos casos.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
|
#5
|
||||
|
||||
|
Pongamos un ejemplo jhonny. Si yo tengo una lista de objetos, y quiero acceder a un objeto sabiendo solo su nombre, no podría usando el método que tu indicas.
|
|
#6
|
||||
|
||||
|
Cita:
NOTA: Habñlamos siempre de TStringList que podamos Ordenar y sin duplicados (opara poder usar el método Find con búsqueda binaria). En el TObjectList cuando buscas con (IndexOf), se hace un recorrido desde el primer objeto mirando si es el que buscas. Si no ese ese, incrementa el índice y vuelve a comparar; Así hasta encontrarlo o llegar al final de la lista. En TStringList (ordenado y sin duplicados) al hacer un Find se coge el elemento central de la lista y se compara. Si es igual, se compara si es mayor o menor y se busca en la mitad de la lista correspondiente empezando por el elemento central y así sucesivamente. En media en un TObjectList harás un número de comparaciones para buscar un elemento igual a la mitad de los elementos; En una lista de 10 harás 5 comparacoiones, en una de 100 harás 50... 10 -> 5 100 -> 50 1000 ->500 10000 - 5000 ... En media en una búsqueda binaria (la que hace TStringList) debes aplicar logaritmo. 10 -> 4 100 -> 7 1000 -> 10 10000 -> 13 .... Si te fijas la proporción se aleja cuantos más elementos hay.
__________________
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. |
|
#7
|
||||
|
||||
|
Cita:
EDITO: Veo que es lo mismo que te ha dicho Seoane.
__________________
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. |
|
#8
|
||||
|
||||
|
Cita:
Si lo que necesitas es lo que planteaste al principio, con el codigo que te di es suficiente. Ventajas de TStringGrid, en el caso tuyo es mas facil buscar un componente segun el nombre de la imagen que posee. Ventaja del TObjectList, por ejemplo queres que al hacer doble click sobre la imagen este elimine o que se agrande en otra ventana. Tenes funciones mas rapidas como Remove(AObject: TObject) y IndexOf(AObject: TObject) que vienen de 10 en estos casos. Si no te interesa tanto esto. Dejalo como esta. pd: No quiere decir que con el Tlist no se pueda hacer busqueda, tambien se puede, es la clase base de las otras clases, por lo que las otras agregan algunas funcionalidades extras. Cita:
, creo que todos los codigos se pueden mejorar un poco ![]()
__________________
[Crandel] |
|
#9
|
||||
|
||||
|
che locos, dejen de hablar todos al mismo tiempo que no se entiende nada. A ver si sacan turno para escribir
![]()
__________________
[Crandel] |
|
#10
|
||||
|
||||
|
Cita:
mmm, si tienes razón en fin todo depende de para que se necesite, quizá mi cerebro se niega a creer que no venga de fabrica un método en esta clase para buscar el objeto por su nombre.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
|
#11
|
||||
|
||||
|
Muchas gracias por la extensa explicación Neftali, todo esta mas claro que el agua.
![]()
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
|
#12
|
||||
|
||||
|
En mi experiencia, a pesar del entusiasmo inicial que alguna vez tuve por el ObjectList, en general es una clase con muy pocas ventajas sobre el StringList, ya que la más de las veces requerimos referenciar a los objetos que contiene por algún identificador. La ventaja de un ObjectList, que sería la de su manejo automático de la destrucción de los ojetos, es realmente muy nimia. Una simple rutinita:
Vamos, qué es más cómodo con ObjectList, lo es. Pero muy poco más cómodo, y la enrome ventaja de acceder a los elementos por medio de un identificador sobrepasa con creces lo otro. // Saludos |
|
#13
|
||||
|
||||
|
Quizás estemos usando el TObjectList cuando no deberíamos usarlo.
Me explico: TObjectList está pensado para guardar una lista de objetos, su principal cualidad (por decirlo así) es encontrar los objetos por su posición (índice) o bien por su dirección (puntero de TObjects), si no necesitamos estas características, quizás no deberíamos usar esta clase. Tenemos una lista de Edits creados en tiempo de ejecución y cuando el usuario teclea debemos localizarlo, ¿para qué complicarnos la vida añadiendo un nombre único a cada TEdit y después usar ese nombre para encontrarlo? Si tenemos el objeto Sender ya podemos encontrar por ese puntero (haciendo uso de TObjectList.IndexOf) el Tedit en cuestión dentro de nuestra lista (no creo que vayamos a tener 10.000 TEdits creados en un Form ). Usar FindComponent será más costoso que el TobjectList.IndexOf, precisamente porque habrá más controles creados en el form, y su búsqueda tardará más.Otra pega que le veo al StringList, es precisamente tener un único identificador para localizar el objeto, ¿qué ocurre si quiero localizar un Objeto por alguna propiedad que lleva dentro dicho objeto?, pues tenemos la misma desventaja que al usar TObjectList, tenemos que hacer un bucle, recorriendo todos los objetos que tiene el StringList y buscando la dichosa propiedad. Yo al menos, jamás he derivado de TStrings o TStringList para obtener funcionalidades extras, sin embargo, si lo he hecho de TObjectList para tratar mis propios objetos sin tener que aplicar moldeo de tipos en mi programa principal. Para mí, ya es muy clarificador el código resultante y si le veo utilidad hacerlo. El método Sort de un TObjectList es también muy útil, ya que creando varias funciones de ordenamiento permite realizar auténticas virguerías con los objetos creados. Aquí un ejemplo práctico: TFolders es un TObjectList, cada elemento vuelve a ser un TObjectList (TFolder) , por último, cada elemento de este último TObjectList es un TObject a secas (TPathElement), que tendrá una serie de propiedades inherentes a cada archivo, como: - ruta relativa de una dada - ruta absoluta - tamaño del archivo - etc.
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 02-03-2007 a las 19:53:07. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Crear y destruir formas dinamicamente | ing_gera | C++ Builder | 1 | 16-02-2007 00:45:23 |
| destruir Aplicacion | jubers85 | Varios | 2 | 10-02-2006 09:27:40 |
| Como destruir o liberar una forma | maguib | Varios | 1 | 11-03-2005 19:39:02 |
| Destruir un TIBQuery | furniman | Varios | 1 | 25-03-2004 12:20:14 |
| No puedo destruir ventana | Marina | Varios | 2 | 02-12-2003 13:43:58 |
|