从列表列表中删除列表,以及Ocaml中的更多列表

时间:2016-04-15 23:15:41

标签: arrays list ocaml

我有类似:[[x,y,z],[a,b,c],[x,b,c],[!x,a,o]](列表清单)

我想要删除所有包含我搜索的元素的列表,例如,如果我搜索x我必须有类似[[a,b,c],[!x,a,o]]的内容。

我知道如果它是一个简单的List,我将不得不这样做: let funfilter elem l = List.filter (fun x -> x != elem) l;; 对于列表列表,我需要在过滤器或map filter内进行过滤。但我无法找到它的正确语法,我不确定这是否是我唯一需要删除列表的方法。

其他平行问题,如果我只想删除List列表中的元素,在这种情况下元素!x - >结果[[a,b,c],[a,o]],我怎么认为这样做?

我有一个模糊的想法是Lis.filter和/或List.filter List.map

List.filter

------------------- EDIT ------------------------- <无线电通信/> 正如我在评论中所说,我做了一个名为head的函数来返回它在这样的列表上看到的1º元素

let head = 
function 
x::_ -> x
| _ -> failwith "no head?";;

和这个功能:

let funfilter elem ll = 
List.filter (fun inner -> (List.exists (fun x -> x <> elem) inner)) ll;;

(我的名单列表名为 passalista ) 然后我就做了 funfilter (head(head passalista)) passalista 在它旁边,我打印了我的 passalista ,值都是一样的。

我现在做错了什么? :■ 我需要澄清一些事情以使问题更容易吗?

1 个答案:

答案 0 :(得分:2)

您需要List.mem

let funfilter elem xs = 
  List.filter (fun inner -> not (List.mem elem inner)) xs

其中elem是您要用于过滤的元素,xs是列表。

示例:

# let funfilter elem xs = 
    List.filter (fun inner -> not (List.mem elem inner)) xs;;
val funfilter : 'a -> 'a list list -> 'a list list = <fun>
# let passalista = [[1; 2]; [3; 2; 1]; [4]];;
val passalista : int list list = [[1; 2]; [3; 2; 1]; [4]]
# funfilter (List.hd (List.hd passalista)) passalista;;
- : int list list = [[4]]

更新:根据Anton Trunov的建议,将List.exists替换为List.mem