Deedle 数据框中的漂亮打印
Pretty Printing in Deedle Data Frame
我想知道是否有一种简单的方法可以将漂亮的打印添加到 Deedle 数据框中使用的自定义类型。
在下面的例子中:
open Deedle
type PrimaryContactInfo =
| Default of int
| NonDefault of int
| Missing
type Account = { PrimaryContact : PrimaryContactInfo }
[ { PrimaryContact = Default(1) }; { PrimaryContact = Default(2) }; { PrimaryContact = NonDefault(5) } ]
|> Frame.ofRecords
我在 fsi 中得到以下输出:
PrimaryContact
0 -> FSI_0011+PrimaryContactInfo+Default
1 -> FSI_0011+PrimaryContactInfo+Default
2 -> FSI_0011+PrimaryContactInfo+NonDefault
但我宁愿有这样的输出:
PrimaryContact
0 -> Default(1)
1 -> Default(2)
2 -> NonDefault(5)
这可能吗?
正如 this language feature suggestion 所暗示的,F# 区分联合不会自动很好地转换为字符串。
您可以通过覆盖 ToString
:
使其很好地转换
type PrimaryContactInfo =
| Default of int
| NonDefault of int
| Missing
override this.ToString () = sprintf "%A" this
但是请注意,使用 "%A"
可能 慢 ,因此请衡量,并在必要时编写更快、更明确的实现;例如:
type PrimaryContactInfo =
| Default of int
| NonDefault of int
| Missing
override this.ToString () =
match this with
| Default i -> sprintf "Default %i" i
| NonDefault i -> sprintf "NonDefault %i" i
| Missing -> "Missing"
这会产生与 sprintf "%A
完全相同的输出,但不使用反射,因此 理论上 应该更快(但不要拿我的上面写着:measure).
我想知道是否有一种简单的方法可以将漂亮的打印添加到 Deedle 数据框中使用的自定义类型。
在下面的例子中:
open Deedle
type PrimaryContactInfo =
| Default of int
| NonDefault of int
| Missing
type Account = { PrimaryContact : PrimaryContactInfo }
[ { PrimaryContact = Default(1) }; { PrimaryContact = Default(2) }; { PrimaryContact = NonDefault(5) } ]
|> Frame.ofRecords
我在 fsi 中得到以下输出:
PrimaryContact
0 -> FSI_0011+PrimaryContactInfo+Default
1 -> FSI_0011+PrimaryContactInfo+Default
2 -> FSI_0011+PrimaryContactInfo+NonDefault
但我宁愿有这样的输出:
PrimaryContact
0 -> Default(1)
1 -> Default(2)
2 -> NonDefault(5)
这可能吗?
正如 this language feature suggestion 所暗示的,F# 区分联合不会自动很好地转换为字符串。
您可以通过覆盖 ToString
:
type PrimaryContactInfo =
| Default of int
| NonDefault of int
| Missing
override this.ToString () = sprintf "%A" this
但是请注意,使用 "%A"
可能 慢 ,因此请衡量,并在必要时编写更快、更明确的实现;例如:
type PrimaryContactInfo =
| Default of int
| NonDefault of int
| Missing
override this.ToString () =
match this with
| Default i -> sprintf "Default %i" i
| NonDefault i -> sprintf "NonDefault %i" i
| Missing -> "Missing"
这会产生与 sprintf "%A
完全相同的输出,但不使用反射,因此 理论上 应该更快(但不要拿我的上面写着:measure).