2011-09-09 10 views

risposta

13

Partenza Array#combination

Poi qualcosa di simile:

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

Impressionante! Non sapevo che la biblioteca andasse così in profondità. – KevDog

+1

È necessario raccogliere l'output del blocco: 2.upto (4) .map {...} – tokland

+1

Anche se ciò non crea una semplice enumerazione, ovviamente, ma un elenco di elenchi. –

7

Tweak basicxman 'un po':

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

Quali considereresti i vantaggi dell'appiattimento? – KevDog

+0

@KevDog: hai chiesto una "lista di tutti i sottoinsiemi", quindi è sembrato opportuno restituire un singolo array appiattito. È solo un dettaglio, direi che è più importante "mappare" il risultato. – tokland

+1

Meglio usare 'flat_map' ... –

Problemi correlati