かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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|]

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