Можно ли сравнить два массива во вложенном цикле для трех условий? - PullRequest
1 голос
/ 29 мая 2011

Скажем, у вас есть два массива (псевдокод):

arrayA = [ "a", "b", "c", "d" ];
arrayB = [ "b", "c", "d", "e" ];

Можно ли найти unique items to arrayA (arrayA.a), common items (b, c, d) и unique items to arrayB (arrayB.e), используя только два цикла во вложенном формате?

Мы можем определить первые две цели как таковые:

// Loop over arrayA
for (itemA in arrayA) {

    // Loop over arrayB
    for (itemB in arrayB) {

        // Assume that arrayA.itemA does not exist in arrayB by default
        exists = false;

        // Check for matching arrayA.itemA in arrayB
        if (itemA == itemB) {

            // If true set exists variable and break the loop
            exists = true;
            break;
        }
    }

    // Tells us if an item is common
    if (exists) {
        // Do something
    }

    // The additional condition we need to determine (item is unique to array b)
    else if () {}

    // Tells us if the item is unique to arrayA
    else {
        // Do something else
    }
}

Вопрос: Можем ли мы пойти еще дальше и определить третье условие (элемент уникален для arrayB)? Хитрость заключается в том, чтобы иметь возможность воздействовать на третье условие в итерации первого цикла.

Циклы могут быть в любом формате (do while, do, for, for in) и в любой комбинации.

Ответы [ 2 ]

2 голосов
/ 29 мая 2011

Этого можно добиться, удалив общие элементы из ArrayB при их обнаружении. Таким образом, ArrayB будет содержать только свои уникальные элементы.

Это также повысит эффективность дальнейших проверок. Обратите внимание, что алгоритм необходимо будет изменить, если ArrayA содержит повторяющиеся элементы.

if (itemA == itemB) {

             // If true set exists variable and break the loop
             exists = true;
arrayB.remove(ItemB);
             break;
          }
1 голос
/ 29 мая 2011

Второе условие (элемент уникален для массива b) всегда будет ложным, так как в этой точке вы перебираете элементы в A.Однако, чтобы ответить на ваш первый вопрос о построении 3-х массивов с 2-мя циклами во вложенном формате, вот что я бы сделал:и itemB перебирает их.Единственный способ обойти это, если вам не нужно сохранять начальные значения массива и значения уникальны, и в этом случае вы можете использовать arrayA и arrayB вместо uniqueA и uniqueB соответственно.

...