ruby – 数组元素之间的排列

我正在编写一个带有ruby的Google Sketchup插件,我在尝试置换arrays中存在的两个arrays时遇到了一个真正的问题,这取决于用户组合。

我有一个数组数组,如[["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"]]

谢谢你的协助。

你可以使用收集:

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

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

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

你还应该看看active_enum

https://github.com/adzap/active_enum

你可以这样做:

 class YourClassName < ActiveEnum::Base value [1] => ['1'] value [2] => ['lol'] value [3] => ['so'] end 
 a = [["1"], ["lol"], ["so"]] index = [2, 1, 3] index.collect {|i| a[i - 1]} 

这输出

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