2017-08-30 3 views
0

Der folgende Code berechnet alle Ergebnisse von 5C4 (5 Kombination 4) als String:die Anzahl der Versuche in Kombination Begrenzung Ruby-

a = ['1', '2', '3', '4', '5'] 
result_array = a.combination(4).map(&:join).to_a 

Gibt es eine Methode, die ich die Anzahl der Kombinationsstudien begrenzen können Ähnlich wie das Modul itertools in Python?

+0

Wenn Sie die ersten so viele Kombinationen nehmen möchten, gibt es einen Grund, warum Sie ein Array konstruieren wollen, anstatt einfach die ersten 'n' Elemente durch den Enumerator an einen anderen Enumerator oder einen Block übergeben zu lassen? –

+0

was ich tue macht tatsächlich Kombinationen zwischen verschiedenen 4 Gruppen, also wenn ich Aufzählung im Enumerator aufrufen, dachte ich, es verursacht so viele Überschneidungen. @Cary Swoveland –

+0

Wenn Sie meinen, dass Sie die ersten so vielen 4-Tupel generieren möchten, indem Sie ein Element aus jedem der 4 Arrays zeichnen, wäre das ein anderes, wenn auch ein interessantes Problem. Wenn ja, erwäge bitte, eine andere Frage zu stellen. –

Antwort

4

Try this:

result_array = a.combination(4).lazy.map(&:join).take(2).to_a 

lazy wird sichergestellt, dass Sie nur so viele Werte berechnen, wie durch take benötigt.

+0

@ jh-shin Bitte beachten Sie, dass der Ort des "faulen" Anrufs zuvor falsch war, ich sollte hier nicht vor dem Kaffee posten ... –

+0

no prob. Ich habe es herausgefunden. Danke, dass du mich über "faul" alarmiert hast –

Verwandte Themen