F# 如何从记录类型调用字段?
如果我有这样的类型:F# 如何从记录类型调用字段?,f#,F#,如果我有这样的类型: type Cats = { Breed = string Color = string Alive = bool } 我将数据映射到它: let mapdata = Catfile.GetSample().Rows |> Seq.map (fun row -> { Breed = row.breed Color = row.color Alive = row.status }
type Cats =
{ Breed = string
Color = string
Alive = bool }
我将数据映射到它:
let mapdata =
Catfile.GetSample().Rows
|> Seq.map (fun row ->
{ Breed = row.breed
Color = row.color
Alive = row.status }
从那张唱片中我怎么称呼“品种”或“颜色”?
我的想法是这样的:
Cats.Breed or Cats.Color
这是真的吗
当我调用记录中的字段时,我的意思是调用映射到该字段的所有数据的序列
编辑:
我希望能够根据上面的结果过滤来自另一个csv的数据,而不必再次运行“mapdata”的整个功能。
因此,我希望能够通过如下操作将结果从“繁殖”中分离出来:Cats.bride
调用该字段中的所有值,并根据其是否在Cats.bride
中过滤不同的数据
类似于以下的函数:
let similarvalues = Seq.Contains (OtherData) Cats.Breed
记录是一种类型。您必须迭代“mapdata”函数的结果才能访问这些属性,类似于您在提供的代码中调用Seq.map的方式 记录是一种类型。您必须迭代“mapdata”函数的结果才能访问这些属性,类似于您在提供的代码中调用Seq.map的方式 您可以通过使用记录实例上的
操作符来访问记录类型的属性,例如cat.Breed
。由于您使用的是Cat
记录类型的集合,因此需要在该序列上使用更高阶的函数将
运算符应用于每个实例并访问其属性。我们将使用您过滤包含cats的CSV文件的示例来演示这是如何工作的
对于从第一个CSV文件生成的序列中的猫,您需要使用类似于Seq.exists
的函数,根据第二个CSV文件中的行检查每只猫的繁殖
属性。可能看起来像这样:
type Cat =
{ Breed: string
Color: string
Alive: bool
}
// Example CSV data type
type Row =
{ Breed: string
Color: string
Status: bool
}
let csvData =
// Load rows from CSV1
[{Breed = "fun"; Color = "lovely"; Status = true}]
|> Seq.map (fun row ->
{ Breed = row.Breed
Color = row.Color
Alive = row.Status })
// Check for matching data in CSV2
let similarData =
// Load rows from CSV2
[{Breed = "grumpy"; Color = "muddy"; Status = true}]
|> Seq.filter (fun row -> csvData |> Seq.exists (fun cat -> cat.Breed = row.Breed))
如您所见,在绑定类似数据时,我们在第二个CSV文件的每一行上使用
Seq.filter
函数,仅查找从第一个CSV文件生成的序列中存在相同品种的猫的行。您可以使用记录实例上的
操作符访问记录类型的属性,例如cat.bride
。由于您使用的是Cat
记录类型的集合,因此需要在该序列上使用更高阶的函数将
运算符应用于每个实例并访问其属性。我们将使用您过滤包含cats的CSV文件的示例来演示这是如何工作的
对于从第一个CSV文件生成的序列中的猫,您需要使用类似于Seq.exists
的函数,根据第二个CSV文件中的行检查每只猫的繁殖
属性。可能看起来像这样:
type Cat =
{ Breed: string
Color: string
Alive: bool
}
// Example CSV data type
type Row =
{ Breed: string
Color: string
Status: bool
}
let csvData =
// Load rows from CSV1
[{Breed = "fun"; Color = "lovely"; Status = true}]
|> Seq.map (fun row ->
{ Breed = row.Breed
Color = row.Color
Alive = row.Status })
// Check for matching data in CSV2
let similarData =
// Load rows from CSV2
[{Breed = "grumpy"; Color = "muddy"; Status = true}]
|> Seq.filter (fun row -> csvData |> Seq.exists (fun cat -> cat.Breed = row.Breed))
如您所见,在绑定
similarData
时,我们在第二个CSV文件的每一行上使用Seq.filter
函数,仅查找从第一个CSV文件生成的序列中存在相同品种的猫的行。是否mapdata |>Seq.map(fun c->c.bride)
提供了您想要的内容?如果没有,你能给出一个你想要提取的数据形状的例子吗?我添加了一些解释我熟悉r、sql、excel,并且对python有一点了解。我不好,我的意思是mapdata是一个值而不是一个函数。mapdata |>Seq.map(fun c->c.Breed)
能给你想要的吗?如果没有,你能给出一个你想要提取的数据形状的例子吗?我添加了一些解释我熟悉r、sql、excel,并且对python有一点了解。我不好,我的意思是mapdata是一个值,而不是一个函数。