社内SEの話

日々起きたことの記録用

【PowerShell】配列の値をランダムに入れ替える

あまり発生する事例はありませんが、他言語であったのでPowerShellで実装してみました。

PowerShellのバージョンによってコマンドが違うので、実際のバージョンを確認してください。

Code 7.0以前

$arr = @("aa","bb","cc","dd","ee")

for($i= 0;$i -ne $arr.Length;$i++){

$_rdm = get-random -Maximum ($arr.Length-1) -Minimum 0

$_tmp = $arr[$i]

$arr[$i] = $arr[$_rdm]

$arr[$_rdm] = $_tmp

}

説明

Get-Random

learn.microsoft.com

Get-Randomは小数点で指定しなければ基本整数型で返します。

-Maximum

配列数を指定しますが、返す番号がそのままインデックスになるので、配列の要素数-1します

-Minimum

最小値は0です

別の例

$arr = @("aa","bb","cc","dd","ee")

$rdm = get-random -Maximum $arr.Length -Minimum 0 -Count $arr.Length

foreach($_r in $rdm){

$_tmp = $arr[$rdm.indexof($_r)]

$arr[$rdm.indexof($_r)] = $arr[$_r]

$arr[$_r] = $_tmp

}

ランダムを配列で取得します。配列で取得するためには-Countパラメータを使います。

Forの代わりにForeachを使います。

Foreach中にインデックスを取得するには

配列.IndexOf($Item)

でインデックスが取得できます。

Code 7.1以降

$arr = $arr | Get-Random -Shuffle

7.1以降のバージョンになると配列を直接入れ替える -Shuffle パラメータを使えます。

learn.microsoft.com

終わりに

PowerShell6以前のバージョンを使わないほうがいいです。

PowerShell7以降のバージョンを使った方が多様なツールが用意されているので、簡単にPowerShellでコードを書けます。