Ruby动态命名数组

时间:2013-01-30 01:21:08

标签: ruby arrays dynamic

我想迭代一些数组,并希望从一组名称中动态命名它们。像这样的东西,用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_array1a_array2a_array[0][0]b_array1b_array2b_array[0][0]c_array1,{ {1}},c_array2

这甚至可能吗?

1 个答案:

答案 0 :(得分: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可用于更改局部变量绑定,但在新版本中,这绝不是“好”方法和does not work

相关问题