【发布时间】:2014-07-02 14:00:18
【问题描述】:
DU 有许多非常有用的方面,包括内置的漂亮打印。然而,令我惊讶的是,我的简单 ToString 函数使格式化 DU 的速度提高了 1000 倍以上。我错过了什么吗? sprintf "%A" 比我的 ToString 函数做得更多?
type XYZ =
|X of float
|Y of float*float
|Z
let ar = // some test Array
[| for i in 1..3000 do for a in [ X(1.) ; Y(2.,3.) ; Z ] do yield a |]
let xyzToString (x:XYZ) =
match x with
|X (a) -> sprintf "X %.1f" a
|Y (a,b)-> sprintf "Y (%.1f,%.1f)" a b
|Z -> "Z"
#time
ar|> Array.map (fun x -> sprintf "%s" (xyzToString x) ) // about 15 ms
ar|> Array.map (fun x -> sprintf "%A" x ) // about 4000 ms
【问题讨论】:
-
很多解析...这与 DU 无关,而是与
sprintf的工作方式有关
标签: f#