Сравнение двух массивов без использования -Compare - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть два массива, один из которых содержит несколько столбцов из файла CSV, а другой просто содержит имена серверов, оба типа string.Для этого сравнения я планирую использовать только столбец имени из файла CSV.Я не хочу использовать -compare, потому что я все еще хочу использовать все столбцы CSV с результатами.Вот пример данных из каждого массива.

csvFile.Name:

linu40944
windo2094
windo4556

compareFile:

linu40944
windo2094
linu24455

Как видите, они содержат похожие имена серверовза исключением того, что $csvFile.Name содержит 25 000+ записей, а $compareFile содержит только 3500.

Я пробовал:

foreach ($server in $compareFile) {
    if ($csvFile.Name -like $server) {
        $count++
    }
}

Каждый раз, когда я запускаю это, для запуска требуется вечность,и в результате $count будет иметь значение в миллионах, когда оно должно быть примерно 3000.Я пробовал разные варианты -match, -eq и т. Д., Где -like.Также обратите внимание, что моя конечная цель - сделать что-то еще, где $count, но сейчас я просто пытаюсь убедиться, что он выводит столько, сколько должен, а это не так.

делать что-то не так здесь?Я использую неправильное форматирование?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Создание пользовательских объектов из $compareFile (чтобы можно было сравнить одно и то же свойство), затем используйте Compare-Object с параметром -PassThru для сравнения.Определите результаты с помощью SideIndicator.

$ref = $compareFile | ForEach-Object {
    New-Object -Type PSObject -Property @{
        'Name' = $_
    }
}

Compare-Object $csvFile $ref -Property Name -PassThru | Where-Object {
    $_.SideIndicator -eq '<='
} | Select-Object -Property * -Exclude SideIndicator

Конечный Select-Object удаляет дополнительное свойство SideIndicator, которое Compare-Object добавляет к результату.

0 голосов
/ 19 декабря 2018

Одна возможная мысль, учитывая размер ваших данных.

Создайте хеш-таблицу (словарь) для каждого имени в первом / большем файле.Имя это ключ.Значение равно 0 для каждого.

Для каждого имени в вашем втором / меньшем / сравниваемом файле добавьте 1 к значению в вашей хеш-таблице, если оно существует.Если он не существует, каков ваш план ???

После этого вы можете сбросить все ключи и значения и посмотреть, какие из них 0, 1 или> 1, которые могут иметь или не иметь значение для вас.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...