Range 演算子のあれこれ

Range 演算子はシーケンシャルな整数列を得ることができる。上限と下限を指定して、ひとつずつ加算もしくは減算した整数の配列を取得できる。

基本編

インクリメント

1 から 5 までひとつずつ加算される配列ならこう書ける。

PS C:\> 1..5
1
2
3
4
5
PS C:\>

デクリメント

5 から 1 までひとつずつ減算される配列ならこう書ける。

PS C:\> 5..1
5
4
3
2
1
PS C:\>

負の整数を指定した場合

正の整数だけではなく負の整数を指定することもできる。

PS C:\> -1..-5
-1
-2
-3
-4
-5
PS C:\>

0 をまたいだ指定

0 をまたいだ正負の整数数列も書ける。

PS C:\> 4..-5
4
3
2
1
0
-1
-2
-3
-4
-5
PS C:\>

応用編

Range 演算子ではシーケンシャルな整数配列が得られるため、それを基に別の配列を得ることもできる。

加法

PS C:\> 1..5 | ForEach-Object { $_ + $_ }
2
4
6
8
10
PS C:\>

乗法

PS C:\> 1..5 | ForEach-Object { $_ * $_ }
1
4
9
16
25
PS C:\>

左シフト

PS C:\> 1..5 | ForEach-Object { $_ -shl $_ }
2
8
24
64
160
PS C:\>

文字との乗算

PS C:\> 1..5 | ForEach-Object { 'a' * $_ }
a
aa
aaa
aaaa
aaaaa
PS C:\>

フィボナッチ数

フィボナッチ数とは

数列の最初の数 F0 を 0、次の数 F1 を 1 としたとき、数列内の任意の場所 n から続く連続した 3 つの数を取り出したとき、常に F(n) + F(n+1) = F (n+2) の関係が成り立つ数列。

PowerShell ではこんな感じに書けた。

PS C:\> $seed = 0, 1
PS C:\> 1..12 | ForEach-Object { $seed[0]; $seed = $seed[1], ($seed[0] + $seed[1]) }
0
1
1
2
3
5
8
13
21
34
55
89
PS C:\>

おそらく PowerShell は、ほかの多くの言語よりも破綻が少なく簡便にフィボナッチ数列を得ることができるのではないかと思う。

コメント

タイトルとURLをコピーしました