У Powershell есть функция агрегации/уменьшения?
Я понимаю, что есть связанные вопросы, но все ответы, похоже, являются обходными ситуациями, которые не учитывают сути дела. Имеет ли powershell операцию, которая может использовать скриптовый блок для объединения элементов массива в одно значение? Это то, что известно на других языках как aggregate
или reduce
или fold
.
Я могу написать это сам довольно легко, но, учитывая, что это базовая операция любой обработки списка, я бы предположил, что что-то построенное, о котором я просто не знаю.
Так что я ищу что-то вроде этого
1..10 | Aggregate-Array {param($memo, $x); $memo * $x}
Ответы
Ответ 1
Нет ничего такого явно называемого "Уменьшить-объект", но вы можете достичь своей цели с помощью Foreach-Object:
1..10 | Foreach {$total=1} {$total *= $_} {$total}
BTW также не является объединением-объектом для объединения двух последовательностей данных на основе некоторого свойства соответствия.
Ответ 2
Это то, что я хотел начать некоторое время. Увидев этот вопрос, просто написал утилиту pslinq
(https://github.com/manojlds/pslinq). Первым и единственным командлетом на данный момент является Aggregate-List
, который можно использовать, как показано ниже:
1..10 | Aggregate-List { $acc * $input } -seed 1
#3628800
Сумма:
1..10 | Aggregate-List { $acc + $input }
#55
Реверс строки:
"abcdefg" -split '' | Aggregate-List { $input + $acc }
#gfedcba
PS: Это скорее эксперимент
Ответ 3
Если вам нужны максимальные, минимальные, суммарные или средние значения, вы можете использовать Measure-Object
, к сожалению, он не обрабатывает какой-либо другой агрегированный метод.
Get-ChildItem | Measure-Object -Property Length -Minimum -Maximum -Average