Búsquedas en ArrayList

19/05/2010 - 07:27 por Rafael Villaran. RAVIPE | Informe spam
Hola a tod@s.
Tengo un arraylist donde cada elemento es un array string (string[]) de dos
elementos.

No consigo encontrar elementos del ArrayList que me consta que existen. He
usado IndexOf y Contains pero siempre me devuelve -1.

Gracias de antemano por la ayuda que prestáis.
Un saludo.
rafael villaran

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
19/05/2010 - 09:11 | Informe spam
"Rafael Villaran. RAVIPE"
wrote in message news:
Tengo un arraylist donde cada elemento es un array string (string[]) de
dos
elementos.

No consigo encontrar elementos del ArrayList que me consta que existen. He
usado IndexOf y Contains pero siempre me devuelve -1.



Tanto el IndexOf como el Contains buscan usando el método Equals heredado
de Object. Para un array de strings, el Equals devuelve lo mismo que
ReferenceEquals, con lo que los valores comparados sólo se consideran
iguales si _apuntan_ al mismo elemento en memoria (el mismo array con dos
strings). No considera que dos arrays sean iguales aunque en su interior
contengan sendas cadenas que sí que son iguales. Si necesitas hacer este
tipo de búsqueda, tendrás que hacerla con un bucle en el que vayas leyendo
elemento por elemento y comparando las cadenas. O bien cambiar el array de
dos cadenas por una clase tuya que contenga los dos valores y en la que
hagas un override de Equals y CompareTo que se comporten como deseas.
Respuesta Responder a este mensaje
#2 Rafael Villaran. RAVIPE
19/05/2010 - 10:23 | Informe spam
Alberto gracias por tu respuesta.
He dedicido montarlo con una Lista y usar el método FindIndex enviándole un
<Predicate>.
Yo quería evitar el recorrido de todos los elementos del Array pero entiendo
que por definición esto es imposible.
En estos momentos acabo de implementarlo y parece que funciona.
Lo dicho muchas gracias por tu respuestas que siempre son interesantes.

Saludos.

"Alberto Poblacion" wrote:

"Rafael Villaran. RAVIPE"
wrote in message news:
> Tengo un arraylist donde cada elemento es un array string (string[]) de
> dos
> elementos.
>
> No consigo encontrar elementos del ArrayList que me consta que existen. He
> usado IndexOf y Contains pero siempre me devuelve -1.

Tanto el IndexOf como el Contains buscan usando el método Equals heredado
de Object. Para un array de strings, el Equals devuelve lo mismo que
ReferenceEquals, con lo que los valores comparados sólo se consideran
iguales si _apuntan_ al mismo elemento en memoria (el mismo array con dos
strings). No considera que dos arrays sean iguales aunque en su interior
contengan sendas cadenas que sí que son iguales. Si necesitas hacer este
tipo de búsqueda, tendrás que hacerla con un bucle en el que vayas leyendo
elemento por elemento y comparando las cadenas. O bien cambiar el array de
dos cadenas por una clase tuya que contenga los dos valores y en la que
hagas un override de Equals y CompareTo que se comporten como deseas.

.

Respuesta Responder a este mensaje
#3 Alberto Poblacion
19/05/2010 - 11:17 | Informe spam
"Rafael Villaran. RAVIPE"
wrote in message news:
Yo quería evitar el recorrido de todos los elementos del Array pero
entiendo
que por definición esto es imposible.



Efectivamente, los ArrayList no "indexan" de ninguna forma el contenido,
por lo que no hay más remedio que iterar sobre los elementos para encontrar
uno, tanto si el recorrido lo haces tú con tu propio bucle como si llamas a
una función de búsqueda en las librerías del Framework, que realizará el
bucle internamente.
Si esperas tener muchos elementos y quieres que la búsqueda sea rápida,
tendrías que pensar en usar algún otro tipo de almacenamiento, como por
ejemplo un Dictionary<K,T>, que internamente usa una tabla de hash, o un
SortedList, que te permite hacer una búsqueda dicotómica.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida