2012-09-02 28 views
6

Tại sao mã này 'khóa' ruby? Và cách tốt nhất để vượt qua nó là gì? Tôi đã đăng giải pháp của mình bên dưới. Có một cách khác để làm điều này? Cảm ơn trước!Thêm vào một mảng trong khi Iterating

Code:

nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 } 

Giải pháp của tôi:

nums = [1, 2, 3] 
adjustments = [] 
nums.each { |i| adjustments << i + 1 } 
nums += adjustments 

Trả lời

8

Đó là bởi vì mỗi sử dụng một Enumerator (vì vậy nó không bao giờ đạt đến cuối cùng nếu bạn giữ nguyên như thế).

Bạn có thể sao chép mảng trước khi áp dụng từng mảng.

nums = [1, 2, 3] 
nums.dup.each { |i| nums << i + 1 } 

Một cách khác là để thêm các yếu tố phụ do bản đồ:

nums = [1, 2, 3] 
nums += nums.map { |i| i + 1 } 
+0

+1 Wow .. Điều đó hoàn toàn có ý nghĩa ngay bây giờ! Cảm ơn! – Dru

4
nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 } 

Bạn đang thêm vào mảng như bạn đang iterating trên nó, vì vậy nó không bao giờ kết thúc việc thực hiện.

+0

+1 Cảm ơn! Tôi đã không tạo ra kết nối trước đó. – Dru

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