F# 搜索具有多个 values/inputs 的记录

F# Search through records with multiple values/inputs

抱歉,如果这看起来像是一个愚蠢的问题,我仍在努力弄清楚 F# 是如何做的

所以,假设我建立了以下记录:

type person = 
{ fName: string;
  lName: string;
  age: int;
  weight: int; }

然后我创建一些人来填充记录

let joe   = {fName = "JOE";   lName = "QUAIL"; age = 34; weight = 133}
let jason = {fName = "JASON"; lName = "QUAIL"; age = 34; weight = 166}
let jerry = {fName = "JERRY"; lName = "PAIL";  age = 26; weight = 199}

所以我想做的是至少使用两个或三个参数(比如 agelName),我想搜索 person 记录中的所有满足 agelName 输入参数的人,目标是将他们添加到列表中。所以在这个例子中,我想搜索姓氏 "QUAIL" 和年龄 34 的记录,这会得到 Joe 和 Jason

在 F# 中,我认为模式匹配是可行的方法,但我不知道如何实现该模式匹配结构。

我的想法是使用这样的结构:

let myPeeps =
 List.filter (function
  | {age = ageImSearchingFor} & {lName = nameImSearchingFor} -> // add that person to a list or something
  | _ -> // do nothing
 )

但我不知道如何在 F# 中正确完成。

所以问题是,如何使用模式匹配(或其他方式)使用多个搜索参数搜索填充的记录?

为此您根本不需要模式匹配。 List.filter 只需要你 return 一个 bool,所以你可以这样做:

List.filter (fun p -> p.age = 34 && p.lName = "QUAIL") myPeeps

这将 return

[joe; jason]

您可以定义一个函数,该函数接受一个人,并且当 any/all 满足特定人的条件时 return 为真,以便根据您的特定需求自定义过滤器功能。