Android: Is there an idiom for Iterating through a SparseArray
Asked Answered
W

3

10

I'm using a list of unique int ids against a list of user names as a fast lookup table and decided to use the sparseArray but I would like to be able print to log the entire list from time to time for debugging purposes.

The SparseArray is not iterable and isn't much like the util.Map interface

Walkup answered 5/9, 2011 at 6:50 Comment(1)
Similar question (with answers) can be found hereTaps
D
16

Mice was correct, code would look something like this;

for(int i = 0; i < sparseArray.size(); i++){
    int key = sparseArray.keyAt(i);
    Object value = sparseArray.valueAt(i);
}
Disfigure answered 30/7, 2012 at 17:39 Comment(1)
More explanation on this solution in the comments here: https://mcmap.net/q/98665/-how-to-iterate-through-sparsearrayBenner
P
4

Use SparseArray.size() to get total size.

Use SparseArray.keyAt and valueAt to get key/value in given index.

Potsdam answered 14/11, 2011 at 12:1 Comment(1)
Example with some more explanation for this solution here: https://mcmap.net/q/98665/-how-to-iterate-through-sparsearrayBenner
J
0

Here's how to display a SparseArray content for debug traces.

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();
}
Jehol answered 14/8, 2012 at 5:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.