将计算的密钥添加到集合

时间:2016-11-30 16:35:30

标签: f# f#-data

请考虑这个由男人和女人组成的数据集,并根据几个变量在第二时刻过滤:

type ls = JsonProvider<"...">
let dt = ls.GetSamples()

let dt2 = 
dt |> Seq.filter (fun c -> c.Sex = "male" && c.Height > Some 150)

dt2

[{"sex":"male","height":180,"weight":85},
{"sex":"male","height":160" "weight":60},
{"sex":"male","height":180,"weight":85}]

假设我想添加第四个键“体重指数”或“bmi”,并且其值大致由“体重”/“身高”给出。因此,我希望:

[{"sex":"male","height":180,"weight":85, "bmi":(180/85)},
{"sex":"male","height":160" "weight":60, "bmi":(160/60},
{"sex":"male","height":180,"weight":85, "bmi":(180/85)}]

我认为map.Add可能会有所帮助。

let dt3 = dt2.Add("bmi", (dt2.Height/dt2.Weight))       

不幸的是,它返回一个错误:

error FS0039: The field, constructor or member 'Add' is not defined

我确信我的代码中还有其他错误,但如果没有此功能,我实际上无法查找它们。我至少正确地解决了这个问题吗?

1 个答案:

答案 0 :(得分:4)

创建JSON的修改版本遗憾的是,F#数据类型提供程序并不容易。让我们难以理解的是,我们可以从源JSON推断出类型,但我们无法“预测”人们可能想要添加的字段类型。

为此,您需要访问JSON值的基础表示并对其进行操作。例如:

bitmap