如何从命名顺序获取整数索引

时间:2009-11-25 20:47:47

标签: ruby-on-rails ruby

这可能非常明显,但我找不到答案。

如何从命名顺序获取整数索引,例如:

{ :first => 0, :second => 1, :third => 2, :fourth => 3 }

Ruby或Rails中是否内置了这样的内容?

感谢。

更新

感谢您的所有回复。这是我选择的解决方案:

def index_for(position) 
  (0..4).to_a.send(position)
end

但是数组只支持最多五分之一,所以它将仅限于此。

5 个答案:

答案 0 :(得分:1)

如果您需要订购索引,则可能需要合并数组并具有

keys = [ :first, :second, :third, :fourth ]
hash = { :first => 0, :second => 1, :third => 2, :fourth => 3 }
hash.each_key { |x| puts "#{keys.index(x)}" }

上述方法仅适用于1.9。

答案 1 :(得分:0)

我通常会保留一组哈希键以维持秩序。

答案 2 :(得分:0)

您使用的是哪个版本的Ruby?对于Ruby 1.8,你不能,因为在这个版本中,哈希是一个无序的集合。这意味着当您插入键时,不会保留顺序。当您遍历散列时,键可能会以与您插入的顺序不同的顺序返回。

但在Ruby 1.9中已经发生了变化。

答案 3 :(得分:0)

查看Hash中混合的Enumerable 我认为 each_with_index 就是您要搜索的内容:

# Calls block with two arguments, the item and its index, for each item in enum. 

hash = Hash.new
%w(cat dog wombat).each_with_index {|item, index|
  hash[item] = index
}
hash   #=> {"cat"=>0, "wombat"=>2, "dog"=>1}

答案 4 :(得分:0)

对于粉丝来说,语言学宝石显然也可以这样做How to convert 1 to "first", 2 to "second", and so on, in Ruby?