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