【问题标题】:How do you call a field from a record type?如何从记录类型中调用字段?
【发布时间】:2018-06-19 05:20:04
【问题描述】:

如果我有这样的类型:

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.Breed 调用该字段中的所有值并根据其是否在Cats.Breed 中过滤不同的数据。

类似的函数:

let similarvalues = Seq.Contains (OtherData) Cats.Breed

【问题讨论】:

  • mapdata |> Seq.map (fun c -> c.Breed) 能给你想要的吗?如果没有,您能否举例说明您要提取的数据的形状?
  • 我添加了一些解释
  • 我熟悉r、sql、excel,对python有点了解。我的错,我的意思是 mapdata 是一个值,而不是一个函数。

标签: f#


【解决方案1】:

您可以通过在记录实例上使用. 运算符来访问记录类型的属性,例如cat.Breed。由于您正在使用 Cat 记录类型的集合,因此您需要在该序列上使用更高阶的函数来将 . 运算符应用于每个实例并访问其属性。我们将使用您过滤包含猫的 CSV 文件的示例来演示其工作原理。

对于从第一个 CSV 文件生成的序列中的猫,您需要使用像 Seq.exists 这样的函数来检查每只猫的 Breed 属性与您在第二个 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 生成的序列中存在具有相同品种的猫的行文件。

【讨论】:

    【解决方案2】:

    记录是一种类型。您必须遍历“mapdata”函数的结果才能访问这些属性,类似于您在提供的代码中调用 Seq.map 的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多