如何创建记录值数组
How to create a array of record values
我有一个问题,我有一个只包含特定类型的记录(在我的例子中称为概率),我想用记录值创建数组。
type Probability = Probability of float
type Probabilities = {
Pp: Probability;
Pf: Probability;
Pd: Probability;
Pg: Probability;
}
let calculatingSum (probablities : Probabilities) =
probablities
// I need something, that can transform probablities to an array of Probability
// such that I can do something like
[|1.0;0.5|]
|> Array.sum
我知道可以单独访问所有元素,但我真的想避免这种情况。
如果我有理由将数据同时视为记录和集合,我会转换为地图(并在需要时将其转换为数组或列表)
像这样:
module Probabilities =
let asMap (p : Probabilities) =
Map.ofList [
"Pp", p.Pp
"Pf", p.Pf
"Pd", p.Pd
"Pg", p.Pg
]
您可以向 Probabilities
类型添加一个方法,将其内容转换为数组:
type Probabilities = {
Pp: Probability;
Pf: Probability;
Pd: Probability;
Pg: Probability;
}
with
member this.ToArray =
[|
this.Pp
this.Pf
this.Pd
this.Pg
|]
然后像这样使用它:
let calculatingSum (probablities : Probabilities) =
probablities.ToArray
|> Array.sumBy (fun (Probability p) -> p)
|> Probability
我有一个问题,我有一个只包含特定类型的记录(在我的例子中称为概率),我想用记录值创建数组。
type Probability = Probability of float
type Probabilities = {
Pp: Probability;
Pf: Probability;
Pd: Probability;
Pg: Probability;
}
let calculatingSum (probablities : Probabilities) =
probablities
// I need something, that can transform probablities to an array of Probability
// such that I can do something like
[|1.0;0.5|]
|> Array.sum
我知道可以单独访问所有元素,但我真的想避免这种情况。
如果我有理由将数据同时视为记录和集合,我会转换为地图(并在需要时将其转换为数组或列表) 像这样:
module Probabilities =
let asMap (p : Probabilities) =
Map.ofList [
"Pp", p.Pp
"Pf", p.Pf
"Pd", p.Pd
"Pg", p.Pg
]
您可以向 Probabilities
类型添加一个方法,将其内容转换为数组:
type Probabilities = {
Pp: Probability;
Pf: Probability;
Pd: Probability;
Pg: Probability;
}
with
member this.ToArray =
[|
this.Pp
this.Pf
this.Pd
this.Pg
|]
然后像这样使用它:
let calculatingSum (probablities : Probabilities) =
probablities.ToArray
|> Array.sumBy (fun (Probability p) -> p)
|> Probability