filter - F# 仅过滤掉列表中的第一个匹配项

标签 filter f# fold

我有一个列表,我想删除符合某些条件的元素,但只删除一个元素。

let items = [1;2;3]

let predicate x =
    x >= 2

let result = items |> List.fold ...
// result = [1;3]

如何实现方法返回[1;3]列表?

最佳答案

您可以使用通用递归函数

let rec removeFirst predicate = function
    | [] -> []
    | h :: t when predicate h -> t
    | h :: t -> h :: removeFirst predicate t

或尾递归(如果您担心堆栈溢出)

let removeFirst predicate list =
    let rec loop acc = function
        | [] -> List.rev acc
        | h :: t when predicate h -> (List.rev acc) @ t
        | h :: t -> loop (h :: acc) t
    loop [] list

关于filter - F# 仅过滤掉列表中的第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46038832/

相关文章:

facebook - 如何使用 F# 获取 Facebook 访问 token

functional-programming - Octave 中的折叠功能

scala - 为什么折叠推断任何?

iterator - Rust 中的 Euler 项目 #2

java - Spring Security Rest Token Authentication - 过滤器不运行

ruby-on-rails - 从 Rails 日志中过滤部分或全部请求 URL

file - 创建文件后如何写入文本文件

audio - 用于音频信号处理的滤波器?

使用列表作为条件的 Java 8 流过滤器

F#如何编写一个按顺序提供计数器编号的函数