2014-01-11 63 views
0

我有以下几点:红宝石<<哈希<< Array.include [递增整数]

ht = Hash.new {|h,k| h[k]=[]} 

CertainParentClass.decendants.each do {|childrens| 
    ht[childrens] << incremented_integer 
} 

$global_switch[0 ... ht.size] = false 

def check_switch(object_class) 
    return $global_switch[ht[object_class][0]] 
end 

而且我想知道怎么做incremented_integer红宝石或是否有更好的解决办法,而不是插入一个整数来检查位置值,就像key_position那样很棒!

def check_switch(object_class) 
    return $global_switch[ht[object_class].key_position] 
end 

回答

2

我想用下面的东西Enumerable#each_with_index

CertainParentClass.decendants.each_with_index do |childrens,ind| 
    ht[childrens] << ind # ind will increment with each pass by 1 default. 
end 

#each_with_index情况下,ind价值将赌注设置为0默认。现在,如果您想使用其他数字而不是0来设置它,请使用Enumerator#with_index。像下面

CertainParentClass.decendants.each.with_index(2) do |childrens,ind| 
    ht[childrens] << ind # ind will increment with each pass by 1 default. 
end 

我通过2作为初始参数,这是在with_index(2)方法第一ind值,你可以改变它根据自己的需要

+0

哇,太棒了。但是如果我在散列表中添加了另外一个密钥呢? each_with_index会继续工作吗? – user3163916

+0

@ user3163916我没有给你.. :( –

+0

例如,在做了CertainParentClass.decendants.each.with_index之后,我想要做同样的过程,但是对于不同的父类,我应该为参数添加什么of_index,以便它会从最新的索引开始? – user3163916

0

您可以使用修改Enumerable模块的迭代器:with_index,这添加索引号块参数列表的末尾,请执行以下操作:

CertainParentClass.decendants.each.with_index do |child, index| 
    ht[ childrens ] << index 
end 

而且病程的你不仅可以:each修改迭代器方法,但返回修改的或未修改的枚举方法。这些方法是:map,:reject,:select

+0

谢谢你的帮助!但我找不到:with_index in Enumerable module ...你有链接吗? – user3163916

+0

@ user3163916看到我的答案 - 我把它链接了。http://www.ruby-doc.org/core-2.1.0/Enumerator.html#method-i-with_index –

+0

@ user3163916查看更新 –