0

次の形式の 2 次元配列があります。

[  [(,  (,  (,  (,  (,],
   [1.0,1.0,1.0,1.0,1.0,], 
   [+,  +,  +,  +,  +,],
   [2.0,2.0,2.0,2.0,2.0,],
   [),  ),  ),  ),  )] 

]

つまり、整数と数学文字の混合です。私がしたいのは、これを次のような 1D 配列の一連の文字列に変換することです。

[ (1+2), (1+2), (1+2), (1+2), (1+2) ]

join でこれを行う方法はありますか?

4

2 に答える 2

4
xs.transpose.map(&:join)
#=> ["(1.1+2.1)", "(1.2+2.2)", "(1.3+2.3)", "(1.4+2.4)", "(1.5+2.5)"]

(補足:なぜ私たちが書くことができないのか知りたい場合はArray.zip(*xs)、この問題を見てください。ファセットの人たちはそれを実装しました。)

于 2012-08-12T12:02:10.310 に答える
3

transposeを使用して、転置された配列の要素を結合できます (何が起こっているかを明確に示すために数字を変更しました)。

# edited to add a transpose with map, thank you @Mladen
# edited to get rid of <<'s, thank you @tokland

# assumption: 
a = [ ['(', '(', '(', '(', '('],
      [1.1, 1.2, 1.3, 1.4, 1.5],
      ['+', '+', '+', '+', '+'],
      [2.1, 2.2, 2.3, 2.4, 2.5],
      [')', ')', ')', ')', ')'] ]

# transpose:
b = []
a.transpose.each { |c| b.push c.join }

# or, transpose with map:
b = a.transpose.map { |c| c.join }

# test:
puts b.inspect

出力は次のとおりです。

["(1.1+2.1)", "(1.2+2.2)", "(1.3+2.3)", "(1.4+2.4)", "(1.5+2.5)"]
于 2012-08-12T12:43:40.240 に答える