1

ネストされた配列を受け取り、一度に2つの連続するタプルのサブ配列を作成するループを作成しようとしています。入力配列は次のようになります

arr = [['A','B'],['C','D'],['E','F'],['G','H'],['I','J'],['K','L'],
      ['M','N'],['O','P']]

Output: ['A','B'],['C','D']
        ['E','F'],['G','H']
        ['I','J'],['K','L']
        ['M','N'],['O','P']

私は次のようなさまざまなループを試しました

arr.each_slice(2) do |k,m|
   new_arr=[k,m]
   puts new_arr
end 

 arr.each_slice(2) { |k,m| puts(k,m) }

これの何が問題になっていますか?どちらの場合も、出力は次のようになります。

A
B
C
D .....
4

1 に答える 1

5

putsこれが、ruby 1.9で配列を処理する方法であり、各要素を新しい行に出力します。.inspect結果はあなたが望むものです、それは印刷されたときだけ異なって見えます:)例えば、で印刷してみてください。

arr = [['A','B'],['C','D'],['E','F'],['G','H'],['I','J'],['K','L'],
      ['M','N'],['O','P']]

arr.each_slice(2) do |k,m|
   new_arr = [k,m]
   puts new_arr.inspect
end
# >> [["A", "B"], ["C", "D"]]
# >> [["E", "F"], ["G", "H"]]
# >> [["I", "J"], ["K", "L"]]
# >> [["M", "N"], ["O", "P"]]

http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-puts

puts(obj、...)→nil

IO#printと同様に、指定されたオブジェクトをiosに書き込みます。まだ改行シーケンスで終わっていないレコード区切り文字(通常は改行)を書き込みます。配列引数を指定して呼び出された場合、各要素を新しい行に書き込みます。引数なしで呼び出された場合、単一のレコード区切り文字を出力します。

$stdout.puts("this", "is", "a", "test")

生成:

this
is
a
test
于 2012-10-21T12:46:18.650 に答える