我的问题是关于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] ]
答案 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)