我有以下内容:
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
我想知道如何在ruby中执行incrementmented_integer,或者是否有更好的解决方案,而不是插入一个整数来检查位置值,就像key_position一样棒!
def check_switch(object_class)
return $global_switch[ht[object_class].key_position]
end
答案 0 :(得分: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
作为初始参数,这是ind
方法中的第一个with_index(2)
值,您可以根据需要进行更改
答案 1 :(得分:0)
您可以使用Enumerable
模块的修改后的迭代器:with_index
,它将索引号添加到块参数列表的末尾,执行如下操作:
CertainParentClass.decendants.each.with_index do |child, index|
ht[ childrens ] << index
end
而且,您不仅可以修改:each
迭代器方法,还可以修改返回已修改或未修改的可枚举方法。这些方法是:map
,:reject
,:select
。