2017-01-31 17 views
0

При использовании Powershell для определения максимального или минимального значения в строковом массиве ведущие нули строки результата обрезаются. Как сохранить нули?Powershell Ведущие нули обрезаются в массиве с помощью командлета Measure-Object

$arr = @("0001", "0002", "0003") 
($arr | Measure-Object -Maximum).Maximum 
>>> 3 

ответ

0

Перечисляя массив является самым быстрым способом:

$max = '' 
foreach ($el in $arr) { 
    if ($el -gt $max) { 
     $max = $el 
    } 
} 
$max 

Или использовать SortedSet из .NET 4 рамок (built-in since Win 8), это в 2 раза быстрее, чем Measure-Object, но в два раза медленнее, чем ручной перечислению выше. Все еще может быть полезно, если вы планируете сортировать данные без дубликатов быстро: это быстрее, чем встроенный Sort-Object.

([Collections.Generic.SortedSet[string]]$arr).max 

Очевидно, это будет выделить память для индекса массива, а не фактические данные, как это будет повторно из существующего массива. Если вы беспокоитесь об этом, просто заставить вывоз мусора с [gc]::Collect()

+0

Не ожидал, что просто выяснить/мин значение макс должен взять ручной цикл в Powershell. Спасибо за ваш ответ! – DanEng

+0

Ух, нет, см. Другой ответ на простой и короткий код. Мне просто нравятся мои сценарии мгновенно при работе с большими объемами данных в файлах журналов и т. Д., Поэтому я продвинул ручную перечисление, так как это в несколько раз быстрее, чем cmdlet Sort/Sort-Object. – wOxxOm

1

попробовать это

$arr = @("0001", "0002", "0003") 
$arr | sort -Descending | select -First 1