我有一个列表,我想删除符合某些条件的元素,但只删除一个元素.
let items = [1;2;3]
let predicate x =
x >= 2
let result = items |> List.fold ...
// result = [1;3]
Run Code Online (Sandbox Code Playgroud)
如何用[1; 3]实现返回列表的方法?
您可以使用通用递归函数
let rec removeFirst predicate = function
| [] -> []
| h :: t when predicate h -> t
| h :: t -> h :: removeFirst predicate t
Run Code Online (Sandbox Code Playgroud)
或尾递归(如果你担心堆栈溢出)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |