2016-07-27 25 views
0

Für dieses Array: a = [8, 2, 22, 97, 38, 15], wie bekomme ich alle Sub-Arrays der Länge drei, in der Art eines Schiebefensters, ohne die Reihenfolge der Werte zu stören.Wie erhält man die Permutation eines Arrays, ohne die Reihenfolge seiner Werte zu ändern?

Zum Beispiel sollte das Ergebnis sein: [[8,2,22],[2,22,97],[22,97,38],[97,38,15]]

+1

Ruby 'Array # permutation' bereits gibt Werte entsprechend der Reihenfolge der Quelle. –

+0

@Alexander, das ist irrelevant, weil die OP-Frage nichts mit Permutationen zu tun hat (angesichts des gewünschten Ergebnisses). :-) –

+1

Ihre Frage ist unklar. Sie fragen nach Permutationen, aber Ihre Beispielergebnisse sind keine Permutationen. Was genau willst du? –

Antwort

2

Sie einen Parameter für wie dies passieren könnte erreichen

a.each_con(3)

Dies gibt eine Enumeration zurück, über die Sie iterieren können. Um die Zählung in ein Array zu drehen, rufen Sie das to_a Methode:

a.each_cons(3).to_a

+0

das wird seine angeforderte Antwort zwar nicht geben – nikkypx

+0

Können Sie die richtige Antwort teilen und bitte richtig darauf hinweisen, wie meine Antwort anders ist? –

+0

alles was ich sage ist 'a.permutation (3) .to_a! = [[8,2,22], [2,22,97], [22,97,38], [97,38,15] ] ' – nikkypx

0

Hier ist, was ich kam mit:

def ordered_permutations(array: [1,2,3], length: n) 
    array = array.dup 
    [].tap do |result| 
    (array.count - (length - 1)).times do 
     result << array[0..(length-1)] 
     array.shift 
    end 
    end 
end 

p ordered_permutations(array: a, length: 3)