Arrayのクリア
ふと思いついてArrayのデータをクリアする方法をいろいろ試してみる。
超テケトーコード。
// F#のバージョン: 1.9.2.9 ////// Array.fillを使う let arr = Array.create 1024 0 let rec for_arr t arr f = match t with | 0 -> () | n -> (f arr); (for_arr (n-1) arr f) let clear arr = Array.fill arr 0 1024 0 do for_arr 1000000 arr clear
////// Arrayを生成しなおす。 let arr = Array.create 1024 0 let rec for_arr t arr f = match t with | 0 -> () | n -> (f arr); (for_arr (n-1) arr f) let clear arr = let test = (Array.create 1024 0) in () do for_arr 1000000 arr clear
////// 一つずつつめなおす。 let arr = Array.create 1024 0 let rec for_arr t arr f = match t with | 0 -> () | n -> (f arr); (for_arr (n-1) arr f) let clear arr = Array.iteri (fun i _ -> arr.(i) <- 0) arr do for_arr 1000000 arr clear
もちろんというかなんというか、Array.fillを使うのが一番早い。
生成しなおす方法だと1/10、一つずつつめなおす方法だと1/40くらいの速度になった。
なんでこんなもの調べてるのかというと、Array2にはfillがないので、どうしたものだろうと。