如何檢查元素是否包含在序列中?我期待一些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