如何比较列表中的每个元素?

时间:2018-02-13 00:42:25

标签: ocaml

我有两个字符串列表lst1和lst2。我想通过使用List操作(如List.map,List.filter)将lst1中的每个元素与lst2中的每个元素进行比较。

在其他语言中,我只会使用嵌套for循环,但我应该在OCaml中做什么?

2 个答案:

答案 0 :(得分:2)

如果保证列表长度相同,则OCaml具有:

List.fold_left2 (fun a e1 e2 -> a and (e1=e2)) true lst1 lst2

或者,相当于@ Roma149提供的答案:

(List.combine lst1 lst2) |> (List.fold_left (fun a (e1,e2) -> a and e1=e2) true)

但是,当然,OCaml定义了每种类型的结构相等性,所以你应该选择:

lst1 = lst2

答案 1 :(得分:-1)

我不知道OCaml,但似乎你正在寻找比较两个数组的功能方法。在这种情况下,我会使用许多语言中存在的zip函数,它会创建一个新数组,其中每个元素都是一个包含该索引处输入数组元素的数组。在OCaml中,这似乎是List.combine

因此,举例来说,压缩[1,2,3][4,5,6]会产生[[1,4],[2,5],[3,6]]

这允许您使用mapfilter对每对进行比较。

例如,在Ruby中我会做这样的事情:

[1,2,3].zip([4,5,6]).map { |x,y| x > y ? x : y }

对不起,这不是一个完整的答案,但我希望它有所帮助。