Ruby<<哈希<< Array.include [递增整数]

时间:2014-01-11 18:29:03

标签: ruby arrays hash

我有以下内容:

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

2 个答案:

答案 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_indexind值默认设置为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