2014-01-11 66 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查看更新 –