Как узнать, является ли A (1d массив) частью B (2d массив)? - PullRequest
0 голосов
/ 10 января 2020

Я могу честно сказать, что я далеко отсюда.

Сфера. У меня есть две базы данных, в которых есть таблицы. Я хотел бы сравнить таблицы с se, если они совпадают или нет.

Мой подход таков:

  • получить данные из db1 table1
  • получить данные из db2 table1
  • для каждой строки в db2 таблице 1 проверьте, присутствует ли эта точная строка в db1 table1

Пример:

db1 table1

  • id, column1, column2
  • 1, aa, bb
  • 2, cc, dd
  • 3, ee, ff

db2 table1

  • id, column1, column2
  • 1, aa, bb
  • 3, ee, aa

Строка с id = 1 не будет генерировать вывод, поскольку он точно такой же в db1 table1 и в db2 table1. Строка с id = 2 не будет генерировать вывод, поскольку она полностью отсутствует в db2 table1. Строка с id = 3 вызовет ошибку, так как значение в столбце 2 отличается между двумя БД.

Мне удалось извлечь данные из двух БД и таблиц, и теперь у меня они есть в двух разных переменных (2d массивы? ). Теперь возникает проблема.

Когда я записываю содержимое на хост, это выглядит так для db1 table1:

@{id=1; column1=aa; column2=bb} @{id=2; column1=cc; column2=dd} @{id=3; column1=ee; column2=ff}

… и облегчает это для db2 table1:

@{id=1; column1=aa; column2=bb} @{id=3; column1=ee; column2=aa}

Моя идея была сделать что-то вроде этого:

foreach ($row in $db2table1) {
    if($db1table1.Contains($row)) {
        #all is good
    }
    else {
        #error
   }
}

Но это не работает. Идеи?

1 Ответ

0 голосов
/ 10 января 2020

Compare-Object облегчает эту задачу. Вы можете выполнить проверку следующим образом:

$check = Compare-Object -ref $db1table1 -dif $db2table1
if ($check) { 
    "Error"
} else {
    "All Good"
}

По умолчанию Compare-Object выводит различия только с указанием того, какой объект имел разницу (свойство SideIndicator). Если никакой разницы не найдено, ничего не выводится. Вы можете изменить поведение по умолчанию с помощью параметров -IncludeEqual и -ExcludeDifferent.

...