检查元素是否在序列中

时间:2009-07-21 08:51:47

标签: f#

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

修改: 或者,为了更简单的任务,如何在两个序列之间进行差异?比如,获取列表中不属于另一个(或那个)的所有元素?

5 个答案:

答案 0 :(得分:34)

稍微简单一些:

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

答案 1 :(得分:6)

Seq.exists

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

答案 2 :(得分: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; ...]

丹尼

答案 3 :(得分:2)

Seq.再次出现,但语法略有不同 -

let testseq = seq [ 1; 2; 3; 4 ]
let testn = 2
testseq |> Seq.exists (fun x -> x = testn)

参见MSDN F#:Seq.exists函数:https://msdn.microsoft.com/en-us/library/ee353562.aspx

那里也有很多好的!

答案 4 :(得分:0)

(另一个问题,另一个答案。)

这有效,但我不认为这是最常见的做法 - (你需要等到美国醒来才发现):

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
        }