-1

私はこの配列の配列を持っています:

配列=[["z1"、 "y1"、 "x1"]、["z2"、 "y2"、 "x2"]、["z3"、 "y3"、 "x3"]、["z4"、 "y4"、 "x4"]]

大きな配列内の配列の要素をインデックスで取得し、それらを変数に入れられるようにしたいと思います。
たとえば、インデックス1の場合、出力は次のようになります。

出力=[["y1"]、["y2"]、["y3"]、["y4"]]

その後も、これらの結果をプッシュして新しい配列を形成できるようにしたいと思います。言い換えると、配列の要素を並べ替えたいと思います(取得してプッシュするよりも良い解決策が見つかった場合)。

例 :

output_x = [["x1"]、["x2"]、["x3"]、["x4"]]

output_y = [["y1"]、["y2"]、["y3"]、["y4"]]

output_z = [["z1"]、["z2"]、["z3"]、["z4"]]

したがって、最終結果は次のようになります。

結果=[["x1"、 "y1"、 "z1"]、["x2"、 "y2"、 "z2"]、["x3"、 "y3"、 "z3"]、["x4"、 "y4"、 "z4"]]

私は本当にこれに対する解決策を見つけたいと思っています。ありがとうございました

PS:x、y、zは座標です。sortそれらをすることを忘れてください

4

3 に答える 3

4

あなたはただ欲しいだけですArray#transpose、それは:の逆Array#zipです

[["z1", "y1", "x1"],
 ["z2", "y2", "x2"],
 ["z3", "y3", "x3"],
 ["z4", "y4" , "x4"]].transpose

=> [["z1", "z2", "z3", "z4"],
    ["y1", "y2", "y3", "y4"],
    ["x1", "x2", "x3", "x4"]]

そこから、それらを個々の配列に分割するのは簡単です。配列を(ZYXではなく)XYZに変換したいだけの場合は、逆の配列をマップしたいだけかもしれません。

[["z1", "y1", "x1"],
 ["z2", "y2", "x2"],
 ["z3", "y3", "x3"],
 ["z4", "y4" , "x4"]].map(&:reverse)
=> [["x1", "y1", "z1"],
    ["x2", "y2", "z2"],
    ["x3", "y3", "z3"],
    ["x4", "y4", "z4"]] 

任意の順序をマップすることもできます。たとえば、ZYXからXZYにマップするには、次を使用します。

coordinates.map {|c| [c[2], c[0], c[1]] }
于 2013-02-07T01:38:10.303 に答える
2

arrayこのように各要素を並べ替えることができます

array.each do |e|
  e.sort!
end

上記のコードを実行すると、あなたarrayが望むもののようになります

result = [["x1", "y1", "z1"], ["x2", "y2", "z2"], ["x3", "y3", "z3"], ["x4", "y4" , "z4"]]

並べ替えの詳細については、こちらを確認してください

アップデート

以下のコメントによると、各サブ配列に座標があります。現在の注文はですので、z, y, xで欲しいですx, y, z。配列内の要素を逆にすると、うまくいきます。

array.each do |e|
  e.reverse!
end

リバースの詳細については、こちらを確認してください

于 2013-02-07T01:28:24.920 に答える
0

最終的な結果を探しているだけの場合:

array  = [["z1", "y1", "x1"], ["z2", "y2", "x2"], ["z3", "y3", "x3"], ["z4", "y4" , "x4"]]
option = []

array.each do |item|
  option << item.reverse
end

puts option.inspect
于 2013-02-07T01:40:34.253 に答える