【发布时间】:2013-07-23 23:06:42
【问题描述】:
我从 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
【问题讨论】: