Android: есть ли идиома для итерации через SparseArray

Я использую список уникальных идентификаторов int против списка имен пользователей в качестве таблицы быстрого поиска и решил использовать sparseArray, но я хотел бы иметь возможность время от времени печатать, чтобы регистрировать весь список для целей отладки.

SparseArray не является итерируемым и не очень похож на интерфейс util.Map.


person user245357    schedule 05.09.2011    source источник
comment
Аналогичный вопрос (с ответами) можно найти здесь   -  person Wasky    schedule 05.07.2012


Ответы (3)


Мыши были правильными, код выглядел бы примерно так;

for(int i = 0; i < sparseArray.size(); i++){
    int key = sparseArray.keyAt(i);
    Object value = sparseArray.valueAt(i);
}
person Pork 'n' Bunny    schedule 30.07.2012
comment
Подробнее об этом решении в комментариях здесь: stackoverflow.com/a/8006994/579234 - person Sogger; 05.10.2012

Используйте SparseArray.size(), чтобы получить общий размер.

Используйте SparseArray.keyAt и valueAt, чтобы получить ключ/значение в заданном индексе.

person Pointer Null    schedule 14.11.2011
comment
Пример с дополнительным объяснением этого решения здесь: stackoverflow.com/a/8006994/579234 - person Sogger; 05.10.2012

Вот как отобразить содержимое SparseArray для трассировки отладки.

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();
}
person Kevin Gaudin    schedule 14.08.2012