我正在使用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"]]
感谢您帮助我。
答案 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"]]