2015-02-10 22 views
5

Sử dụng repeat Tôi có thể tạo một trình lặp lặp lại một phần tử. Nhưng làm cách nào tôi có thể lặp lại nhiều giá trị vô hạn? Ví dụ:Làm cách nào để tạo một trình lặp lặp lại nhiều lần vô hạn?

let repeat_1 = repeat(1); // 1, 1, 1, 1, 1, 1, 1, 1, 1, ... 
let repeat_123 = repeat([1, 2, 3]); // 1, 2, 3, 1, 2, 3, 1, 2, ... // or similar 
+0

Hãy chắc chắn để upvote câu trả lời hữu ích và đánh dấu một câu trả lời như chấp nhận nếu nó giải quyết vấn đề của bạn! Nếu không có câu trả lời nào được chấp nhận, hãy cân nhắc việc để lại nhận xét giải thích lý do hoặc chỉnh sửa câu hỏi của bạn để giải quyết vấn đề theo cách khác. – Shepmaster

Trả lời

3

Tìm thấy nó ra:
Một cũng có thể repeat mảng, tuples hoặc lát (tùy theo nhu cầu).

Ví dụ:

let repeat_123 = std::iter::repeat([1, 2, 3]); // [1, 2, 3], [1, 2, 3], ... 

iterator này được lồng nhau, tuy nhiên, để làm phẳng nó, sử dụng flatmap

let pattern = &[1, 2, 3]; 
let repeat_123_flat = std::iter::repeat(pattern).flat_map(|x| x.iter()); 
+1

Tôi nghĩ rằng bạn có thể cần phải có 'let rep = & [1, 2, 3]; let rep_flat = repeat (rep) .flat_map (| x | x.iter()); '(hoặc ít nhất nó không hoạt động như bạn đã viết trên bất kỳ phiên bản playpen nào đang sử dụng ngày hôm nay) –

+0

Cảm ơn, tôi đã sửa nó! – Kapichu

12

Bạn có thể sử dụng .cycle() như thế này:

fn main() { 
    let values = [1, 2, 3]; 
    let repeat_123 = values.iter().cloned().cycle(); 
    for elt in repeat_123.take(10) { 
     println!("{}", elt) 
    } 
} 

Nó hoạt động trên bất kỳ thiết bị lặp nào có thể được nhân bản (trình biến đổi lặp, không phải là các phần tử của nó).

Xin lưu ý rằng bộ điều hợp .cloned() là ngẫu nhiên! Nó dịch các phần tử vòng lặp tham chiếu bằng tham chiếu của trình vòng lặp của slice thành các giá trị.

Một cách đơn giản để viết chuỗi đặc biệt này là:

let repeat_123 = (1..4).cycle(); 
+0

Thực sự rất thanh lịch. +1 – Kapichu

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