2013-02-07 58 views
-1

我有此數組的數組:
紅寶石 - 把數組的數組元素中的可變由索引

陣列= [[ 「Z1」, 「Y1」, 「×1」],[ 「Z2」, 「Y2」, 「X2」],[ 「Z3」, 「Y3」, 「×3」],[ 「Z4」, 「Y4」, 「×4」]]

我想能夠通過索引檢索較大數組內的數組元素,並將它們放入一個變量中。
例如,對於索引輸出應爲:

輸出= [[ 「Y1」],[ 「Y2」],[ 「Y3」],[ 「Y4」]]

我也希望能夠推動這些結果形成一個新的數組。換句話說,我想重新排列數組的元素(如果您可以找到比檢索和推送更好的解決方案)。

實施例:

output_x = [[ 「X1」],[ 「×2」],[ 「×3」],[ 「×4」]]

output_y = [[ 「y1」],[「y2」],[「y3」],[「y4」]]

output_z = [[「z1」],[「z2」],[「z3」], z4「]]

所以最終的結果應該是這樣的:

結果= [[ 「X1」, 「Y1」, 「Z1」],[ 「×2」, 「Y2」, 「Z 2」],[ 「×3」, 「Y3」, 「Z3」 ],[「x4」,「y4」,「z4」]]

我真的很想找到解決方案。 謝謝

PS:x,y和z是座標。忘了sort荷蘭國際集團他們

回答

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"]] 

從那裏,它很容易分裂那些成單個陣列。如果你只是想翻譯的陣列爲XYZ(而不是ZYX),那麼你也許只想映射逆轉數組:

[["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]] } 
+0

它並不總是從ZYX到XYZ。 –

+0

然後你需要提供一個更好的例子。儘管'transpose'可以讓你得到你所需要的東西,因爲你可以從轉置數組中索引單個數組,從原始數組中獲取給定子索引的所有值。 –

2

你可以做一個排序每個元素在array這樣

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

如果你運行上面的代碼,你array看起來像你想要什麼

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

有關分類的更多信息,請查詢here

更新

根據您的評論下面,你有每個子數組中的座標。由於現在的訂單是z, y, x,您希望他們在x, y, z。顛倒數組中的元素會起到訣竅的作用。

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

有關反向更多信息,請here

+0

簡單的像:) –

+0

X,Y和Z是座標。這就是我問這個問題的原因。 –

+0

你能否提供更多的信息,我假設你只是想按照你在問題 – Firyn

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