Сравнение каждого элемента нескольких динамических массивов

#java

#java

Вопрос:

У меня есть список некоторого типизированного объекта, где каждый узел списка имеет массив [n].

Теперь, исключая временную сложность, сейчас мне нужно сравнить каждый элемент массива со всеми элементами других массивов внутри списка. Как я могу это сделать? Потому что, если бы список был фиксированного размера, я бы сделал что-то подобное (предположим, что размер равен 3):

 for(Array firstArray : lst.get(0).getArray()){
   for(Array secondArray : lst.get(1).getArray()){
      for(Array thirdArray : lst.get(2).getArray()){
   //do something
                }
           }
   }
  

Но со списком без фиксированного размера? Как можно достичь моей цели?

Ответ №1:

В неопределенном количестве циклов? Звучит как рекурсия:

 void doAll(List<ArrayHolder> lst) {
    doAllFrom(lst, 0);
}
void doAllFrom(List<ArrayHolder> lst, int off) {
    if (off == lst.length()) {
        //do something
    } else {
        ArrayHolder arrayHolder = lst.get(off);
        for (Array nthArray : arrayHolder.getArray()) {
            doAllFrom(lst, off 1);
        }
    }
}
  

Очевидно, вам нужно будет что-то сделать nthArray . Возможно, добавление его в линейный список текущих Array :

 void doAll(List<ArrayHolder> lst) {
    doAllFrom(lst, new ArrayHolder[lst.size()], 0);
}
void doAllFrom(List<ArrayHolder> lst, ArrayHolder[] holders, int off) {
    if (off == lst.size()) {
        //do something
    } else {
        ArrayHolder arrayHolder = lst.get(off);
        for (Array nthArray : arrayHolder.getArray()) {
            holders[off] = nthArray;
            doAllFrom(lst, holders, off 1);
        }
    }
}
  

Комментарии:

1. Ваш ответ абсолютно правильный, но я думаю, что мой вопрос слишком общий, извините за это. Список имеет размер n, а массивы имеют размер m (независимо друг от друга). И мне нужно найти элементы каждого массива с близостью к отметке времени в 10 секунд. Возможно, я открою другой вопрос, но пока это лучший ответ

2. @Pikappa Не имеет значения, что массивы имеют разные размеры — for цикл обработает это (по одному на кадр). Все индексы в приведенном выше коде находятся в списке (и совпадают ArrayHolder[] ), а не в ваших массивах.

Ответ №2:

 for(Array first : lst.get(0).getArray()){
    for(int i: first){                    //i is first element of comparison
       for(Array second : lst.get(0).getArray()){
          for(int j: second){             //j is second element of comparison
              if(i compare j)
              //do something
          }
       }
    }
}
  

это сделает вашу работу, но сложность слишком плоха.
Рассматриваемые элементы массивов являются целыми числами.