2009-07-21 102 views
13

如何檢查元素是否包含在序列中?我期待一些Seq.contains,但我找不到它。謝謝檢查元素是否在序列中

編輯: 或者,爲了更容易的任務,如何使兩個序列之間的差異?就像,獲得不屬於另一個(或那樣)的列表中的所有元素?

+0

對於你的第二個問題,請看這裏:http://stackoverflow.com/questions/1158114/f-seq-diff – Benjol 2009-07-23 06:25:58

回答

6

Seq.exists

let testseq = seq [ 1; 2; 3; 4 ] 
let equalsTwo n = (n = 2) 
let containsTwo = Seq.exists equalsTwo testseq 
0

(另一個問題,另一個答案。)

這工作,但我不認爲這是最idomatic辦法做到這一點 - (你需要等到我們醒來發現):

let s1 = seq [ 1; 2; 3; 4 ] 
let s2 = seq [ 3; 4; 5; 6 ] 

seq { 
    for a in s1 do 
     if not (Seq.exists (fun n -> n = a) s2) then 
      yield a 
     } 
+1

你有什麼是O(nm)算法,其中n是第一個列表的長度和m是第二個的長度。當n和m大致相等時,你可能會認爲這是一個O(n^2)算法。我認爲有更有效的方法來計算一個集合的交集。 – Juliet 2009-07-21 13:19:17

5

Set是你的朋友在這裏:

let a = set [0;1;2;3] 
let b = set [2;3;4;5] 
let c = a - b 
let d = b - a 
let e = Set.intersect a b 
let f = a + b 
> 
val c : Set<int> = seq [0; 1] 
val d : Set<int> = seq [4; 5] 
val e : Set<int> = seq [2; 3] 
val f : Set<int> = seq [0; 1; 2; 3; ...] 

丹尼

32

點點簡單:

let contains x = Seq.exists ((=) x) 
+1

請問這是什麼`(=)`語法? – 2014-09-11 19:24:22