我正在制作的程序有一个简单的配置文件,看起来像这样。
@overlays = {
:foo => "http://www.bar.com",
:bar => nil,
}我需要做的是遍历这个散列,并得到以下输出。
OverlayKey[0]='foo'
OverlayVal[0]='http://www.bar.com'
OverlayKey[1]='bar'
OverlayVal[1]='nil'为了保持我想要的配置,我需要一些假的索引号。我不想把数字加到哈希表中,这会让配置看起来有点丑陋。所以我在输出过程中一直在玩人工生成数字的游戏。
这是丑陋的,但我只是在玩它目前。
def makenumbers
@numbers = []
length = @overlays.length - 1
(0..length).each do |num|
@numbers.push("#{num}")
end
end
makenumbers
@overlays.each do |key,val|
@numbers.each do |num|
puts "OverlayKey['#{num}']='#{key}'"
puts "OverlayVal['#{num}']='#{val}'"
end
end这给了我类似这样的东西。
OverlayKey['0']='foo'
OverlayVal['0']='http://www.bar.com'
OverlayKey['1']='foo'
OverlayVal['1']='http://www.bar.com'
OverlayKey['0']='bar'
OverlayVal['0']=''
OverlayKey['1']='bar'
OverlayVal['1']=''我明白为什么这没有给出我想要的输出,尽管在尝试了一段时间后,我真的不确定如何在配置过程中不向散列中添加数字来做我想做的事情。当然,这很简单,我只是不能理解它。
发布于 2009-11-14 04:09:58
我不知道问题是什么,除了默认情况下哈希值是不排序的:
overlays = {
:foo => "http://www.bar.com",
:bar => nil,
}
overlays.each_with_index do |(k,v), i|
puts "OverlayKey['#{i}']=#{k.to_s.inspect}"
puts "OverlayVal['#{i}']=#{v.to_s.inspect}"
end输出如下所示:
OverlayKey['0']="bar"
OverlayVal['0']=""
OverlayKey['1']="foo"
OverlayVal['1']="http://www.bar.com"作为备注:
# Instead of this:
"#{num}"
# Use this:
num.to_shttps://stackoverflow.com/questions/1731560
复制相似问题