2014-10-22 7 views
1

У меня есть два двумерных массива, которые я бы хотел сравнить. Я хотел бы изменить каждый элемент, который отличается между этими двумя массивами.Как сравнить два двухмерных массива?

  1. Элементы массива должны находиться в одном порядке.
  2. Операция будет выполняться очень часто.
  3. Двумерные массивы могут составлять до 100x100 элементов.

Как бы я смог достичь этого?

Первый массив - это матрица (предположим, 50x50, но это может варьироваться). Затем я сделаю несколько тестов для каждого элемента и измените элемент, если будут соблюдены определенные условия. Элемент НЕ изменен в первом массиве, вместо этого я сохраняю все элементы во втором массиве.

Элементы могут быть либо «O», либо «» (пробел).
Примера массив может выглядеть следующим образом:

@Array = ([" ", "O", "O", "O", " "], [" ", "O", " ", " ", "O"], ["O", "O", " ", "O", " "], [" ", "O", "O", "O", "O"], [" ", " ", " ", "O", " "])

После каждой итерации (одна итерации = все проверки побежали по всем элементам), новый массив печатается пользователю. Причина, по которой я хочу сравнить массивы, заключается в том, что я хотел бы видеть, какие элементы изменились.

Некоторые примеры кода, что я до сих пор:

foreach my $Row(@GameBoard) { 
    foreach my $CurrentCell (@$Row) { 
     <<COMPARE ELEMENT TO THE CORRESPONDING ELEMENT IN THE OTHER ARRAY HERE>> 
    } 
} 

Для получения более подробной информации о какой-то, что я хотел бы сделать, это реализация Perl игры Конвея жизни. У меня все получилось, но теперь я хочу «оживить» рост и смерть ячеек («O» -> «o» -> «.» -> "") перед запуском следующей итерации.

+0

вы упоминаете «изменить», если соответствующие элементы отличаются. Но что именно изменить? Пожалуйста, объясни. Кроме того, было бы неплохо иметь пример набора массивов, о котором вы говорите, с образцами данных. –

+0

Пример кода помогает устранить неполадки. Что у тебя до сих пор. Являются ли массивы определенно всегда одной и той же геометрией? – Sobrique

+1

Я отредактировал мой вопрос, надеюсь, теперь это яснее. – Bifrost

ответ

1

(написание моего комментария для потомков ...)

Поскольку набор данных состоит из двух идентичных массивов-из-массивов известных размеров, самый простой способ думать о нем, как происходит через наборы координат, начиная с (0,0) и поднимаясь до (49,49). Вы можете сравнить значение в массиве 1 с массивом 2 для каждого набора координат и сохранить результаты для этой позиции в том же месте в третьем массиве.

Поскольку у вас есть два 50x50 массивов, код будет выглядеть следующим образом:

for my $x (0 .. 49) { 
    for my $y (0 .. 49) { 
     # now compare $array1[$x][$y] to $array2[$x][$y] 
     # results can be saved in $array3[$x][$y] 
    } 
} 
+0

Спасибо, я заработал с этим. – Bifrost

Смежные вопросы