首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何伪造哈希索引?

如何伪造哈希索引?
EN

Stack Overflow用户
提问于 2009-11-14 04:04:17
回答 1查看 210关注 0票数 0

我正在制作的程序有一个简单的配置文件,看起来像这样。

代码语言:javascript
复制
@overlays = {
  :foo => "http://www.bar.com",
  :bar => nil,
}

我需要做的是遍历这个散列,并得到以下输出。

代码语言:javascript
复制
OverlayKey[0]='foo'
OverlayVal[0]='http://www.bar.com'
OverlayKey[1]='bar'
OverlayVal[1]='nil'

为了保持我想要的配置,我需要一些假的索引号。我不想把数字加到哈希表中,这会让配置看起来有点丑陋。所以我在输出过程中一直在玩人工生成数字的游戏。

这是丑陋的,但我只是在玩它目前。

代码语言:javascript
复制
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

这给了我类似这样的东西。

代码语言:javascript
复制
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']=''

我明白为什么这没有给出我想要的输出,尽管在尝试了一段时间后,我真的不确定如何在配置过程中不向散列中添加数字来做我想做的事情。当然,这很简单,我只是不能理解它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-14 04:09:58

我不知道问题是什么,除了默认情况下哈希值是不排序的:

代码语言:javascript
复制
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

输出如下所示:

代码语言:javascript
复制
OverlayKey['0']="bar"
OverlayVal['0']=""
OverlayKey['1']="foo"
OverlayVal['1']="http://www.bar.com"

作为备注:

代码语言:javascript
复制
# Instead of this:
"#{num}"
# Use this:
num.to_s
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1731560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档