Обратные элементы по трубопроводу

Есть ли функция, которая меняет элементы, переданные по конвейеру?

например:.

PS C:\> 10, 20, 30 | Reverse
30
20
10

Ответ 1

Вы можете ввести $input внутри функции непосредственно в массив, а затем отменить это:

function reverse
{ 
 $arr = @($input)
 [array]::reverse($arr)
 $arr
}

Ответ 2

Здесь один подход:

function Reverse ()
{
    $arr = $input | ForEach-Object { $_ }
    [array]::Reverse($arr)
    return $arr
}

Ответ 3

Я понимаю, что это не использует канал, но я нашел это проще, если вы просто хотели сделать это встроенным, есть простой способ. Просто поместите ваши значения в массив и вызовите существующую функцию Reverse следующим образом:

$list = 30,20,10
[array]::Reverse($list)
# print the output.
$list

Поместите это в окно PowerShell ISE и запустите его, результат будет 10, 20, 30.

Опять же, это если вы просто хотите сделать это встроенным. Есть функция, которая будет работать для вас.

Ответ 4

Использование $ input работает для конвейера, но не для параметра. Попробуй это:

function Get-ReverseArray {
    Param(
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipeLine = $true)]
        $Array
    )
    begin{
        $build = @()
    }
    process{
        $build += @($Array)
    }
    end{
        [array]::reverse($build)
        $build
    }
}
#set alias to use non-standard verb, not required.. just looks nicer
New-Alias -Name Reverse-Array -Value Get-ReverseArray

Тестовое задание:

$a = "quick","brown","fox"

#--- these all work 
$a | Reverse-Array
Reverse-Array -Array $a
Reverse-Array $a

#--- Output for each
fox
brown
quick

Ответ 5

10, 20, 30 | Sort-Object -Descending {(++$script:i)}

Ответ 6

Try:

10, 20, 30 | Sort-Object -Descending