Powershell Ведущие нули обрезаются в массиве с помощью командлета Measure-Object

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

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

person DanEng    schedule 31.01.2017    source источник


Ответы (2)


Перечисление массива — самый быстрый метод:

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

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

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

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

person wOxxOm    schedule 31.01.2017
comment
Не ожидал, что простое определение максимального/минимального значения должно выполняться вручную в Powershell. Спасибо за ваш ответ! - person DanEng; 31.01.2017
comment
Хм, нет, см. другой ответ для простого и короткого кода. Мне просто нравится, когда мои сценарии работают мгновенно при работе с большими объемами данных в файлах журналов и т. д., поэтому я продвигаю ручное перечисление, поскольку оно в несколько раз быстрее, чем командлет Sort/Sort-Object. - person wOxxOm; 31.01.2017

попробуй это

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