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是一个值,而不是一个函数。