2014-08-28 78 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 
相關問題