美好的一天。你能帮我把几个函数(string -> string -> bool)
合并到一个大函数(string -> bool)
。
我有(contactList:seq<string>)
和功能
let checkEqual localPhone azurePhone =
localPhone = azurePhone
我做了Seq.map
来获取函数(string -> bool)
:
let checks = contactList |> Seq.map (fun x -> checkEqual x)
现在我需要将这个seq以某种方式组合成一个大函数(string -> bool)
,以便在Azure移动服务的Where子句中使用它。
let! result = table.Where(fun y > checkAll y).ToEnumerableAsync()
|> Async.AwaitTask
我想表达这样的表达方式:
y == x1 || y == x2 || etc
答案 0 :(得分:2)
对于此特定情况,您可以使用Seq.exists
:
checkAll y = checks |> Seq.exists (fun f -> f y)
答案 1 :(得分:0)
对于更通用的解决方案,您可以编写如下内容:
checkAll y = checks |> Seq.fold (fun acc check -> acc || check y) false
acc
通常这样命名,因为它是累加器 - 存储到目前为止计算内容的值。
exists
的优点是,一旦找到真值,它就会停止扫描序列,而fold
总是到达序列的末尾。但是fold
更为通用:你可以用你的序列写一个总和,一个产品或者任何全局计算。