2016-07-27 22 views
0

この配列の場合:a = [8, 2, 22, 97, 38, 15]、どのように値の順序を乱すことなく、スライディングウィンドウの方法で長さ3のすべてのサブ配列を取得できますか?配列の値の順序を変えずに並べ替える方法は?

たとえば、結果は次のようになります。[[8,2,22],[2,22,97],[22,97,38],[97,38,15]]ここ

+1

Rubyの '配列#1 permutation'は既にソースの順序に従って値を返します。 –

+0

@Alexander、それは無関係です。なぜなら、OPの質問は(望ましい結果を考慮して)順列とは関係がないからです。 :-) –

+1

あなたの質問は不明です。あなたは順列について尋ねていますが、あなたの結果は順列ではありません。あなたが望んでいるものは何ですか? –

答えて

2

a.each_con(3)

これは、繰り返し処理できる列挙型を返します。配列に列挙を有効にする、to_aメソッドを呼び出す:

a.each_cons(3).to_a

+0

彼の要求された答えはありませんが – nikkypx

+0

あなたは正しい答えを共有できますか、私の答えがどう違っているか正確に指摘してください。 –

+0

私が言っているのは、 'a.permutation(3).to_a!= [[8,2,22]、[2,22,97]、[22,97,38]、[97,38,15] ] ' – nikkypx

0

は私が思いついたものです:あなたが達成するために、このようにするためにパラメータを渡すことができ

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) 
関連する問題