2009-07-21 145 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