ruby - 数组元素之间的排列

时间:2013-02-05 21:05:41

标签: ruby-on-rails ruby

我正在使用ruby编写Google Sketchup中的插件,并且在尝试根据用户组合置换数组中存在的两个数组时遇到了一个真正的问题。

  

我有一组像[["1"],["lol"], ["so"]]

这样的数组      

如果我们有这样的组合< [1, 2, 3]就可以了,它应保持不变:[["1"],["lol"], ["so"]]

     

但是当我们有这样的组合[2, 3, 1]时,输出应为:[["lol"], ["so"], ["1"]]

     

[3,1,2] => [["so"], ["1"], ["lol"]]

     

...等

修改
对不起家伙我忘记了数组我有点像[["1, 2, 3"], ["lol1, lol2, lol3"], ["so1, so2, so3"]]所以对于组合[2, 3, 1],输出应该是:[["2, 3, 1"], ["lol2, lol3, lol1"], ["so2, so3, so1"]]

感谢您帮助我。

4 个答案:

答案 0 :(得分:4)

您可以使用collect:

array   = [["1"],["lol"], ["so"]]
indexes = [2, 1, 3]
indexes.collect {|i| array[i-1]} #=> [["lol"], ["1"], ["so"]]

如果将索引设置为0,则可以删除-1

split和map可用于将字符串转换为值:

"1, 2, 3".split(",").map { |i| i.to_i} # [1, 2, 3]

然后您也可以拆分字符串

"lol2, lol3, lol1".split(/, /) #=> ["lol2", "lol3", "lol1"]

您应该能够将其与上述内容放在一起以获得您想要的内容。

答案 1 :(得分:1)

indexes = [2, 1, 3]
array   = [["1"],["lol"], ["so"]]
result  = indexes.map{|index| array[index-1] }

答案 2 :(得分:0)

您还应该查看active_enum

https://github.com/adzap/active_enum

您可以执行以下操作:

class YourClassName < ActiveEnum::Base
  value [1] => ['1']
  value [2] => ['lol'] 
  value [3] => ['so']
end

答案 3 :(得分:0)

a = [["1"], ["lol"], ["so"]]
index = [2, 1, 3]

index.collect {|i| a[i - 1]}

此输出

[["lol"], ["1"], ["so"]]