У меня есть два массива, которые я бы хотел разделить. У меня был некоторый успех с COMPARE-OBJECT, но он слишком медленный для больших массивов. В этом примере $ ALLVALUES и $ ODD являются моими двумя массивами.Сравнение двух больших текстовых массивов в PowerShell
Раньше я был в состоянии сделать это эффективно, используя FINDSTR ex. FINDSTR/V /G:ODD.txt ALLVALUES.txt> EVEN.txt FINDSTR закончил это менее чем за 2 секунды для 110 000 элементов. (даже пришлось читать и записывать с диска)
Я пытаюсь вернуться к производительности FINDSTR, где он даст мне все в файле ALLVALUES.txt, который НЕ соответствует ODD.txt (давая мне значения EVEN в этот случай)
ПРИМЕЧАНИЕ. Этот вопрос касается не ODD или EVEN, а только практического примера, который может быть быстро и визуально проверен, что он работает по желанию.
Вот код, с которым я играл. Используя COMPARE-OBJECT, 100 000 заняли 200 секунд против 2 секунд для FINDSTR на моем компьютере. Я думаю, что есть более элегантный способ сделать это в PowerShell. Спасибо за вашу помощь.
# ------- Build the MAIN array
$MIN = 1
$MAX = 100000
$PREFIX = "AA"
$ALLVALUES = while ($MIN -le $MAX)
{
"$PREFIX{0:D6}" -f $MIN++
}
# ------- Build the ODD values from the MAIN array
$MIN = 1
$MAX = 100000
$PREFIX = "AA"
$ODD = while ($MIN -le $MAX)
{
If ($MIN%2) {
"$PREFIX{0:D6}" -f $MIN++
}
ELSE {
$MIN++
}
}
Measure-Command{$EVEN = Compare-Object -DifferenceObject $ODD -ReferenceObject $ALLVALUES -PassThru}
Метод хеширования размещен очень быстро. Спасибо, что ответили! Любые другие методы, которые следует учитывать с разумной скоростью? – BEEBUG
Я добавил Compare-StringArray и улучшил код hashset. – wOxxOm