2011-09-05 8 views
8

Estoy usando una lista de identificadores int únicos contra una lista de nombres de usuario como una tabla de búsqueda rápida y decidí usar el sparseArray pero me gustaría poder imprimir registre la lista completa de vez en cuando para fines de depuración.Android: ¿Hay un modismo para iterar a través de un SparseArray

El SparseArray no es iterable y no se parece mucho a la interfaz util.Map

+0

pregunta similar (con respuestas) se puede encontrar [aquí] (http://stackoverflow.com/questions/7999211/iterate-through-sparsearray/8006994#8006994) – Wasky

Respuesta

4

Uso SparseArray.size() para obtener el tamaño total.

Utilice SparseArray.keyAt y valueAt para obtener la clave/valor en el índice dado.

+2

Ejemplo con un poco más de explicación para esta solución aquí: http://stackoverflow.com/a/8006994/579234 – Sogger

14

Los ratones eran correctos, el código se vería así;

for(int i = 0; i < sparseArray.size(); i++){ 
    int key = sparseArray.keyAt(i); 
    Object value = sparseArray.valueAt(i); 
} 
+1

Más explicación sobre esta solución en los comentarios aquí: http://stackoverflow.com/a/8006994/579234 – Sogger

0

Aquí se muestra cómo mostrar un contenido SparseArray para las huellas de depuración.

public static String sparseArrayToString(SparseArray<?> sparseArray) { 
    StringBuilder result = new StringBuilder(); 
    if (sparseArray == null) { 
     return "null"; 
    } 

    result.append('{'); 
    for (int i = 0; i < sparseArray.size(); i++) { 
     result.append(sparseArray.keyAt(i)); 
     result.append(" => "); 
     if (sparseArray.valueAt(i) == null) { 
      result.append("null"); 
     } else { 
      result.append(sparseArray.valueAt(i).toString()); 
     } 
     if(i < sparseArray.size() - 1) { 
      result.append(", "); 
     } 
    } 
    result.append('}'); 
    return result.toString(); 
} 
Cuestiones relacionadas