2011-10-05 18 views
12

Tôi thường muốn thực hiện một hành động trên một mảng X lần sau đó trả lại kết quả khác với số đó. Mã tôi thường viết là như sau:Cách sạch để trả về một mảng từ X.times trong Ruby

def other_participants 
    output =[] 
    NUMBER_COMPARED.times do 
     output << Participant.new(all_friends.shuffle.pop, self) 
    end 
    output 
    end 

Có cách nào khác để làm điều này?

+0

Tôi thề này không phải dành cho danh tiếng, nhưng tôi thực sự nghĩ rằng bạn đã chấp nhận câu trả lời sai. Thu thập thực sự là chính xác một trong những quyền sử dụng. Ngay cả khi bạn thực hiện một câu trả lời khác chấp nhận rằng một, tôi thực sự nghĩ rằng bạn nên chấp nhận một bản đồ/thu thập câu trả lời cho khi ai đó đi qua và nhìn vào câu hỏi này. – xaxxon

+0

Tôi cũng nghĩ chính mình sau khi thử nghiệm vì vậy tôi đã chuyển đổi –

Trả lời

19

có vẻ như bạn có thể sử dụng bản đồ/thu thập (chúng là từ đồng nghĩa trên Số lượng). nó trả về một mảng với nội dung là sự trả về của mỗi lần lặp thông qua bản đồ/tập hợp.

def other_participants 
    NUMBER_COMPARED.times.collect do 
    Participant.new(all_friends.shuffle.pop, self) 
    end 
end 

Bạn không cần biến số khác hoặc câu lệnh trả về rõ ràng.

http://www.ruby-doc.org/core/Enumerable.html#method-i-collect

6

Bạn có thể sử dụng each_with_object:

def other_participants 
    NUMBER_COMPARED.times.each_with_object([]) do |i, output| 
    output << Participant.new(all_friends.shuffle.pop, self) 
    end 
end 

Từ fine manual:

each_with_object (obj) {| (* args), memo_obj | ...} → obj
each_with_object (obj) → an_enumerator

lặp khối đưa ra cho mỗi phần tử với một đối tượng tùy ý nhất định, và trả về đối tượng ban đầu nhất định.
Nếu không có khối nào được đưa ra, trả về một điều tra viên.

+2

Lập trình bắt buộc! Quay trong địa ngục silicon! –

+2

@Andrew: Hãy rời khỏi bãi cỏ của tôi! –

0

tôi điều gì đó như thế này là tốt nhất

def other_participants 
    Array.new(NUMBER_COMPARED) { Participant.new(all_friends.shuffle.pop, self) } 
end 
Các vấn đề liên quan