かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Seq.windoed使ってみる

使い道がわからなかったwindowedですが、とりあえず、まとまった前後の要素を見ながら処理したいという用途で使えるのかな。例えば、ある配列の要素から前後の要素との平均を求めるみたいな処理で使えるとか・・・?

open System

// 適当な元データ作る
let r = Random()
let arr = [| for i = 0 to 5 do yield (r.NextDouble() * 100.) |]

printfn "元データ = %A" arr
arr 
	|> Seq.windowed 3
	|> Seq.map (function
					| [|a;b;c|] -> (a + b + c) / 3.0
					| _ -> failwith "Invalid") // ありえないけど
	|> Seq.toArray
	|> (printfn "平均 = %A")

実行結果

元データ = [|12.88210811; 57.23914544; 88.44198794; 55.74756793; 43.12834597; 15.68328315|]
平均 = [|52.85441383; 67.14290044; 62.43930061; 38.18639902|]

ふむぅ。ぴん!と来たときに使えるように頭に入れておこう。