gpt4 book ai didi

f# - 有条件地在 F# 中的正向管道链中应用过滤器?

转载 作者:行者123 更新时间:2023-12-03 15:14:29 25 4
gpt4 key购买 nike

我从 CSV 文件中获取了一系列记录。我想选择性地按日期和类型过滤这些记录,并选择性地合并满足特定条件的记录。使用 Seq.filter 可以直接选择按日期和类型过滤.但是,我想选择性地合并满足某些标准的记录。我有这个功能,我只是不知道如何有选择地将它应用到结果序列。我不能使用 Seq.filter 因为 consolidate 对整个序列而不是一次对一个项目进行操作。我可以用一个中间变量来解决它,我只是想知道是否有一种优雅的惯用方式来处理这个问题。

基本上,我想知道一种在前向管道序列中有条件地应用链的一个(或多个)部分的方法。

这就是我想要的伪代码( options 包含命令行参数):

let x =
getRecords options.filePath
|> Seq.filter (fun r -> if options.Date.HasValue then
r.Date.Date = options.Date.Value.Date else true)
|> Seq.filter (fun r -> if not(String.IsNullOrEmpty(options.Type)) then
r.Type = options.Type else true)
if options.ConsolidateRecords then
|> consolidateRecords

最佳答案

您可以使用 if ... else具有恒等函数的表达式 else条款:

let x =
getRecords options.filePath
|> (* ... bunch of stuff ... *)
|> (if options.ConsolidateRecords then consolidateRecords else id)
|> (* ... optionally more stuff ... *)

关于f# - 有条件地在 F# 中的正向管道链中应用过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com