Индекс многомерного массива - PullRequest
2 голосов
/ 01 декабря 2011

У меня проблема с поиском некоторых данных, которые я поместил в свой многомерный массив. У меня, в основном, есть полный список arraylist ...

ArrayList<ArrayList<Integer>> array = new ArrayList<ArrayList<Integer>>();

Так что теперь я хочу использовать indexOf, чтобы найти массив, содержащий конкретные данные, потому что я сравниваю его с другими данными в том же массиве.

Например, я знаю, что могу использовать цикл for, чтобы найти эти данные -

for (i = 0; i < array.size(); i++)
{
    if (array.get(a).get(0) == array.get(i).get(0))
        //then do something
}

Но я подумал, что будет проще использовать indexOf или lastindexOf. Кто-нибудь знает правильный способ, которым я бы использовал это? Я думаю, что-то вроде

array.indexOf(array.get(????).get(0))

но я не уверен: (

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

К сожалению, это невозможно. Более того

array.indexOf(array.get(????).get(0))

неверно, поскольку array.get(????).get(0) будет целым числом, а array является ArrayList из ArrayList с, а не Integer с.

0 голосов
/ 01 декабря 2011

Сначала нам нужен контейнер координат. Тогда нам нужен метод поиска. Они оба используют фабричный метод. Затем вы можете передать MultiIndex список, и он получит значение там.

class MultiIndex<E> {

    static <E> MultiIndex<E> indexOf(List<List<E>> list, E e) {
        for(int i = 0; i < list.length; i++) {
            List<E> in = list.get(i);
            int index = in.indexOf(e);
            if(index > -1) return new MultiIndex(i,index);
        }
        return null;
    }
    int outside;
    int inside;
    private MultiIndex(int out, int in) {
        outside = out;
        inside = in;
    }

    E get(List<List<E>> list) {
        return list.get(outside).get(inside);
    }
}
0 голосов
/ 01 декабря 2011

Можете ли вы использовать внешние библиотеки? Если да, то guava определяет Iterables.indexOf (Iterable, Predicate)

Тогда вы можете посмотреть свой массив следующим образом:

final int whatYoureLookingFor = 1232;
int index = Iterables.indexOf(array, new Predicate<ArrayList<Integer>>() {
        public boolean apply(ArrayList<Integer> a) {
             return a.contains(whatYoureLookingFor);
        }
    });
...