Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#搜索具有多个值/输入的记录_F#_Pattern Matching_Records - Fatal编程技术网

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

F#搜索具有多个值/输入的记录,f#,pattern-matching,records,F#,Pattern Matching,Records,抱歉,如果这看起来是个愚蠢的问题,我仍在试图弄清楚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

抱歉,如果这看起来是个愚蠢的问题,我仍在试图弄清楚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}
因此,我想做的是至少获取两个或三个参数(比如
age
lName
),然后我想在
person
记录中搜索满足
age
lName
输入参数的所有人,目标是将他们添加到列表中。所以在这个例子中,我想在记录中搜索姓氏“QUAIL”和年龄34岁的人,这将得到Joe和Jason

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

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

let myPeeps =
 List.filter (function
  | {age = ageImSearchingFor} & {lName = nameImSearchingFor} -> // add that person to a list or something
  | _ -> // do nothing
 )
List.filter (fun p -> p.age = 34 && p.lName = "QUAIL") myPeeps
但我不知道如何在F#中正确地做到这一点


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

对此,您根本不需要模式匹配。List.filter只需要返回bool,这样就可以执行以下操作:

let myPeeps =
 List.filter (function
  | {age = ageImSearchingFor} & {lName = nameImSearchingFor} -> // add that person to a list or something
  | _ -> // do nothing
 )
List.filter (fun p -> p.age = 34 && p.lName = "QUAIL") myPeeps
这会回来的

[joe; jason]
您可以定义一个函数,当满足特定人员的任何/所有条件时,该函数接受该人员并返回true,以根据您的特定需要自定义筛选函数