【发布时间】:2009-07-21 08:51:47
【问题描述】:
如何检查一个元素是否包含在一个序列中?我期待一些 Seq.contains,但我找不到它。谢谢
编辑: 或者,为了更简单的任务,如何区分两个序列?比如,获取一个列表中不属于另一个(或不属于)的所有元素?
【问题讨论】:
标签: f#
如何检查一个元素是否包含在一个序列中?我期待一些 Seq.contains,但我找不到它。谢谢
编辑: 或者,为了更简单的任务,如何区分两个序列?比如,获取一个列表中不属于另一个(或不属于)的所有元素?
【问题讨论】:
标签: f#
简单一点:
let contains x = Seq.exists ((=) x)
【讨论】:
(=) 的语法是什么?
let z = x + y // is the same like let z = (+) x y
序列存在
let testseq = seq [ 1; 2; 3; 4 ]
let equalsTwo n = (n = 2)
let containsTwo = Seq.exists equalsTwo testseq
【讨论】:
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; ...]
丹尼
【讨论】:
Seq.exists 再次存在,但语法略有不同 -
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
那里还有很多其他的好东西!
【讨论】:
(另一个问题,另一个答案。)
这行得通,但我认为这不是最典型的方式——(你需要等到美国醒来才能发现):
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
}
【讨论】: