Tôi đang tìm cách tạo chuỗi bao gồm mọi phần tử thứ n của một chuỗi khác, nhưng dường như không tìm cách làm điều đó một cách thanh lịch. Dĩ nhiên tôi có thể hack một thứ gì đó, nhưng tôi tự hỏi liệu có một chức năng thư viện mà tôi không nhìn thấy hay không.Bắt mọi phần tử thứ n của một chuỗi
Các hàm chuỗi có tên kết thúc bằng -i có vẻ khá tốt cho mục đích tìm ra khi phần tử là phần thứ n hoặc (bội số của n), nhưng tôi chỉ có thể thấy iteri
và mapi
, không có trong đó thực sự tự vay cho nhiệm vụ.
Ví dụ:
let someseq = [1;2;3;4;5;6]
let partial = Seq.magicfunction 3 someseq
Sau đó partial
nên [3;6]
. Có điều gì giống như nó ra khỏi đó?
Edit:
Nếu tôi không phải là khá tham vọng và cho phép n
là không đổi/nổi tiếng, sau đó tôi vừa phát hiện ra rằng sau nên làm việc:
let rec thirds lst =
match lst with
| _::_::x::t -> x::thirds t // corrected after Tomas' comment
| _ -> []
Would có cách nào để viết ngắn hơn không?
Bạn có thể sử dụng 'mapi' để biến từng phần tử của danh sách thành' Số' hoặc 'Không',' lọc' ra khỏi 'Không', và sau đó 'ánh xạ' chúng trở lại loại chưa được đặt trước. –
Giải pháp của bạn sử dụng danh sách có vẻ tốt (nhưng bạn có thể muốn viết '_ :: _ :: x :: t' (thay vì' (_, _, x) :: t' sử dụng danh sách các bộ dữ liệu). là 'Seq' sẽ làm việc với các bộ sưu tập khác ngoài danh sách, nhưng điều đó có thể không phải là vấn đề đối với bạn. Phiên bản của bạn với danh sách là một mã chức năng tốt. –
Có, tất nhiên, nó phải là' _ :: _ :: x :: t', nên đã yêu cầu trình biên dịch trước khi dán nó ở đây –