2009-07-21 37 views
13

cách kiểm tra xem một phần tử có được chứa trong một chuỗi không? Tôi mong đợi một số Seq.contains, nhưng tôi không thể tìm thấy nó. Cảm ơnKiểm tra xem một phần tử có nằm trong một chuỗi

EDIT: Hoặc, để dễ dàng hơn, cách tạo sự khác biệt giữa hai chuỗi? Giống như, nhận được tất cả các yếu tố trong một danh sách mà không thuộc về một yếu tố khác (hoặc điều đó)?

+0

Đối với câu hỏi thứ hai của bạn, hãy xem tại đây: http://stackoverflow.com/questions/1158114/f-seq-diff – Benjol

Trả lời

6

Seq.exists

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

(Một câu hỏi, câu trả lời khác.)

này hoạt động, nhưng tôi không nghĩ rằng đó là cách idomatic nhất để làm điều đó - (bạn sẽ cần đợi cho đến khi Mỹ thức dậy để tìm hiểu):

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

Điều bạn có là thuật toán O (nm), trong đó n là độ dài của danh sách đầu tiên và m là chiều dài của giây. Khi n và m xấp xỉ nhau, bạn cũng có thể xem xét thuật toán O (n^2) này. Tôi nghĩ rằng có nhiều cách hiệu quả hơn để tính toán giao điểm của một tập hợp hơn thế này. – Juliet

5

Set là bạn của bạn ở đây:

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; ...] 

Danny

32

Little bit đơn giản:

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

Cú pháp '(=)' được gọi là gì? –

+4

Nó chỉ là một toán tử, nhưng được bọc trong một dấu ngoặc hoạt động như một hàm bình thường. Toán tử bao gồm các ký tự đặc biệt (như '=') không được nhận dạng là tên hàm. Ví dụ: 'cho z = x + y // giống như cho z = (+) x y' –

0

Seq.exists một lần nữa, nhưng với cú pháp hơi khác nhau -

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

Xem MSDN F #: Seq.exists chức năng: https://msdn.microsoft.com/en-us/library/ee353562.aspx

Rất nhiều người khác cũng tốt!

Các vấn đề liên quan