F#搜索具有多个值/输入的记录
抱歉,如果这看起来是个愚蠢的问题,我仍在试图弄清楚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
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,以根据您的特定需要自定义筛选函数