2

我想遍历多个数组,并希望从名称数组中动态命名它们。像这样的东西,用...name中的元素替换names array

names=[a, b, c]
names.each{|name|
name_array1=[]
name_array2=[]
name_array[0][0].each{|i|                           
    if i>0
        name_array1.push([i])
    end
    if i<0
        name_array2.push([i])
    end
  }
}

基本上创建数组a_array1, a_array2, a_array[0][0], b_array1, b_array2, b_array[0][0], c_array1, c_array2,c_array[0][0]

这甚至可能吗?

4

1 回答 1

6

Ruby 不支持动态局部变量名1

但是,这可以使用Hash轻松表示。哈希将键映射到值,在这种情况下,键表示“名称”,值是数组:

# use Symbols for names, although Strings would work too
names = [:a, :b, :c]

# create a new hash
my_arrays = {}

# add some arrays to our hash
names.each_with_index { |name, index|
   array = [index] * (index + 1)
   my_arrays[name] = array
}

# see what we have
puts my_arrays

# access "by name"
puts my_arrays[:b]

(有一些方法可以编写上述内容而不会产生副作用,但这应该是一个开始。)


1动态实例/类变量名称是另一回事,但最好暂时保留为“高级主题”,不适用于当前任务。在过去(Ruby 1.8.x),eval可以用来改变局部变量绑定,但这从来都不是一个“好”的方法,并且在较新的版本中不起作用。

于 2013-01-30T01:55:41.673 回答