2012-06-10 32 views
7

Tôi có một danh sách mà tôi muốn chia theo cách tương tự như phương pháp của Clojure (partition sz step col) hoặc chức năng IterableLike.sliding(size: Int, step: Int) của Scala. Cụ thể, được đưa ra một danh sách như:Bạn có thể sao chép các hàm trượt (phân vùng) của Clojure hoặc các hàm trượt() của Scala bằng ổi?

(1, 2, 3) 

Tôi muốn để có thể lặp qua các tiểu danh sách như:

(1, 2), (2, 3) 

Trong Clojure này sẽ được thực hiện với:

(partition 2 1 (1, 2, 3)) 

và với Scala, nó sẽ là:

val it = Vector(1, 2, 3).sliding(2) 

Tuy nhiên tôi không có một sự sang trọng như vậy và tôi hy vọng sẽ không phải cuộn của riêng tôi. Ổi có phương pháp phân vùng đến gần nhưng không cung cấp chồng chéo. Googling cũng không có kết quả. Liệu một phương pháp như vậy tồn tại hay tôi sẽ phải cuộn của riêng tôi?

+1

nếu không ai biết về bất cứ điều gì tốt hơn bạn có thể hợp nhất hai phân vùng ổi, trong đó thứ hai là từ một chuỗi với một phần tử bị giảm ... –

+0

Bạn sẽ không cần phân vùng * kích thước? Ý tưởng tốt mặc dù. –

+0

Bạn có thể sử dụng bản đồ, một cái gì đó như: '(bản đồ (fn [xy] '(x, y)) lst (còn lại lst))' – Ankur

Trả lời

1

Ổi không có bất kỳ thứ gì như thế này ngay bây giờ, nhưng nếu bạn nộp issue, chúng tôi có thể thảo luận việc thêm nó.

Đối với bản thân mình, tôi sẽ sử dụng một ArrayDeque để lưu trữ cửa sổ đang chạy, nhưng điều đó sẽ không có ý nghĩa đối với một phương pháp thư viện.

+0

Sự cố được gửi tại http://code.google.com/p/guava-libraries/issues/detail?id=1027. –

2

Ổi không có điều này, nhưng AbstractIterator của nó có thể sẽ làm cho "cuộn của riêng bạn" dễ dàng hơn.

Có thể đã có feature request được gửi cho nó; nếu không, xin vui lòng cảm thấy tự do.

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