Как подделать хэш-индекс? - PullRequest
0 голосов
/ 13 ноября 2009

Программа, которую я создаю, имеет простой файл конфигурации, похожий на этот.

@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']=''

Поймите, почему это не дает мне желаемого результата, хотя, немного поиграв с ним, я не совсем уверен, как сделать то, что я хочу, без добавления чисел в хеш во время настройки. Конечно, это довольно просто, я просто не могу обернуться вокруг него.

1 Ответ

4 голосов
/ 13 ноября 2009

Я не знаю, в чем проблема, кроме того, что хэши не отсортированы по умолчанию:

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_s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...