2011-09-09 58 views

Trả lời

13

Check-out Array#combination

Sau đó, một cái gì đó như thế này:

2.upto(4) { |n| array.combination(n) } 
+0

Awesome! Tôi không biết thư viện đã đi sâu đến vậy. – KevDog

+1

Bạn phải thu thập đầu ra của khối: 2.upto (4) .map {...} – tokland

+1

Thậm chí điều đó không tạo ra một liệt kê đơn giản, tất nhiên, nhưng một danh sách các danh sách. –

7

Tweaking basicxman là một chút:

2.upto(4).flat_map { |n| array.combination(n).to_a } 
#=> [["a", "b"], ["a", "c"], ["a", "d"], ..., ["c", "d", "e", "f"]] 
+0

Bạn sẽ xem điều gì là lợi thế của việc làm phẳng? – KevDog

+0

@KevDog: bạn đã yêu cầu "danh sách tất cả các tập hợp con", vì vậy nó có vẻ phù hợp để trả lại một mảng phẳng. Nó chỉ là một chi tiết, tôi muốn nói điều quan trọng hơn là "lập bản đồ" tối đa. – tokland

+1

Tốt hơn để sử dụng 'flat_map' ... –

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