2012-03-19 32 views
8

F # List cung cấp toán tử(::) để thêm một mục ở phía trước danh sách. Có một chức năng để làm tương tự cho Seq? Cách duy nhất tôi gặp phải là sử dụng Seq.append như sau. Có cách nào hiệu quả hơn/thanh lịch để làm việc này không?Cách tốt hơn để thêm phần tử vào đầu trình tự F #

> let myLst = [1..5] 
> 0::myLst;; 
val it : int list = [0; 1; 2; 3; 4; 5] 


> let mySeq = {1..5} 
> Seq.append (seq [0]) mySeq;; 
val it : seq<int> = seq [0; 1; 2; 3; ...] 

Có thể trùng lặp, nhưng không thực sự trả lời câu hỏi của tôi.

[1] sử dụng Seq.append như trên

+3

Lưu ý rằng bạn chỉ có thể sử dụng 'Seq.append [0] mySeq', bạn không cần phải quấn' [0] 'trong một cuộc gọi đến' seq'. – kvb

Trả lời

8

Nó có thể giúp để nhớ lại rằng F # chuỗi là một tính toán, quả thật vậy. Bất kể bạn sẽ đạt được điều đó như thế nào, vào cuối ngày bạn sẽ có một phép tính mới, nếu được liệt kê, trước tiên sẽ tạo ra phần tử nối thêm, và sau đó sinh ra chuỗi cũ. Trong hầu hết các hình thức trực tiếp này có thể đạt được bằng a sequence expression:

> let mySeq = {1..5} 
> seq { yield 0; yield! mySeq };; 
val it : seq<int> = seq [0; 1; 2; 3; ...] 

Seq.append thư viện chức năng chỉ là một thực hiện tối ưu hóa của ngữ nghĩa các hành động tương tự.

+0

Gene Belitski: cảm ơn. vì vậy bạn về cơ bản đề nghị sử dụng 'Seq.append' vì nó được tối ưu hóa? – vis

+0

@vis: Tôi không nghĩ rằng đề xuất "một phù hợp với tất cả" phổ biến có ý nghĩa. Câu trả lời, như thường lệ, sẽ là "nó phụ thuộc ...". Tuy nhiên, khi bạn biết các nguyên tắc cơ bản, bạn có thể tự mình lựa chọn. –

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