2014-08-28 79 views
1

我有一个关于比较数组的问题。 我有两个数组:如何知道两个数组是否至少有一个相等的元素(f#)

let A = [|1;2;3;4;5|] 
    let B = [|2;7|] 

我想现在如果他们至少有一个平等的元素。如果他们有回报真的。 我试试这样的功能:

let exists = Array.exists2 (fun elem1 elem2 -> elem1 = elem2) 
    exists A B 

在这种情况下应该返回true。 但它有一个问题,因为它只在数组长度相同时才起作用。怎么可能做一个适用于不同长度的函数?

+0

相关:http://stackoverflow.com/questions/17721968 /怎么办 - 我 - 验证 - 收集 - 的 - 值 - 是唯一的 - 包含-无重复式-CS – 2014-09-17 02:08:37

回答

3

的交集这可能是简单的:

let exists a b = (Set.ofArray a, Set.ofArray b) ||> Set.intersect |> (<>) Set.empty 
0

的一种方法是计算两套

let aset,bset = Set.ofArray A, set.ofArray B 
Set.Intersect aset,bset |> Set.toSeq |> Seq.length |> function |0 -> false _ -> true 
1
let exists a b = Array.exists (Set.ofArray a).Contains b 
相关问题