F#搜索具有多个值/输入的记录

Xan*_*kar 3 f# records pattern-matching

对不起,如果这看起来像一个愚蠢的问题,我仍然想弄清楚F#是如何做的

所以,说我建立了以下记录:

type person = 
{ fName: string;
  lName: string;
  age: int;
  weight: int; }
Run Code Online (Sandbox Code Playgroud)

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

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}
Run Code Online (Sandbox Code Playgroud)

因此,我想要做的是至少需要两个或三个参数(比如age,和lName),我想通过搜索person记录所有谁满足输入参数的人age,并lName与目标是将它们添加到列表中.所以在这个例子中,我想通过记录搜索姓氏"QUAIL"和34岁,这将得到我和乔和杰森

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

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

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

但我不知道如何在F#中做得恰到好处.

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

Kev*_*per 5

你根本不需要模式匹配.List.filter只需要你返回一个bool,所以你可以这样做:

List.filter (fun p -> p.age = 34 && p.lName = "QUAIL") myPeeps
Run Code Online (Sandbox Code Playgroud)

这将返回

[joe; jason]
Run Code Online (Sandbox Code Playgroud)

您可以定义一个接受人的函数,并在满足特定人员的任何/所有条件时返回true,以根据您的特定需求自定义过滤器函数.