如何检查元素是否包含在序列中?我期待一些Seq.contains,但我找不到它。谢谢检查元素是否在序列中
编辑: 或者,为了更容易的任务,如何使两个序列之间的差异?就像,获得不属于另一个(或那样)的列表中的所有元素?
如何检查元素是否包含在序列中?我期待一些Seq.contains,但我找不到它。谢谢检查元素是否在序列中
编辑: 或者,为了更容易的任务,如何使两个序列之间的差异?就像,获得不属于另一个(或那样)的列表中的所有元素?
Seq.exists
let testseq = seq [ 1; 2; 3; 4 ]
let equalsTwo n = (n = 2)
let containsTwo = Seq.exists equalsTwo testseq
(另一个问题,另一个答案。)
这工作,但我不认为这是最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
}
你有什么是O(nm)算法,其中n是第一个列表的长度和m是第二个的长度。当n和m大致相等时,你可能会认为这是一个O(n^2)算法。我认为有更有效的方法来计算一个集合的交集。 – Juliet 2009-07-21 13:19:17
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; ...]
丹尼
点点简单:
let contains x = Seq.exists ((=) x)
请问这是什么`(=)`语法? – 2014-09-11 19:24:22
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
还有很多其他好的!
对于你的第二个问题,请看这里:http://stackoverflow.com/questions/1158114/f-seq-diff – Benjol 2009-07-23 06:25:58