(F#)内置函数,用于在列表不包含特定值时对其进行过滤

时间:2018-04-10 00:43:25

标签: f# functional-programming

我的问题是关于F#中的列表过滤。是否有内置函数允许过滤列表,只返回那些不满足条件的列表?

let listOfList = [ [1;2;3;4;5]; [6;7;8;9;10]; [11;2;5;14;1] ]
let neededValue = 1

我知道F#的功能是List.Contains()但是我只想返回不满足条件的列表。

let sortedLists = listOfList |> List.filter(fun x -> x <> x.Contains(neededValue)

这显然不起作用,因为在这种情况下我将列表与列表是否包含特定值进行比较。我该怎么做?在这种情况下我想要的输出是:

sortedLists = [ [6;7;8;9;10] ]

2 个答案:

答案 0 :(得分:4)

你太近了!将x <>更改为not <|,它会有效。

let listOfList = [ [1;2;3;4;5]; [6;7;8;9;10]; [11;2;5;14;1] ]
let neededValue = 1

let sortedLists = listOfList |> List.filter(fun x -> not <| x.Contains(neededValue))

not函数允许您取消布尔值,以便过滤器表达式中的类型匹配。

答案 1 :(得分:1)

在f#中,使用

更加惯用
List.contains neededValue x

而不是

 x.Contains(neededValue)

所以我会像这样表达它

let sortedLists =
    listOfList 
    |> List.filter (List.contains neededValue >> not)