如何在Ruby中永久更新哈希?

时间:2016-03-05 23:59:44

标签: ruby hash

所以我在这里看到了关于如何写入外部文本文件的问题等。 例如,将我的哈希值写入另一个文件:

hash = {
  Key1: Value1,
  Key2: Value2
}
open(FileToWriteTo, 'w') do |f|
  hash.each { |key, value| f.puts "#{key}: #{value}" }

但我想要实现的是,如果我运行程序并在我的哈希列表中添加一些东西,那么下次我运行并显示哈希时,新的添加将在那里。这是我用来添加到我的哈希码的代码:

puts "Type 'add' to add an item to the hash"

choice = gets.chomp.downcase

case choice
when 'add'
  puts "What do you want to add?"
  addition = gets.chomp
  if hash[addition.to_sym].nil?
    puts "What value will #{addition} have? (integer)"
    add_value = gets.chomp
    hash[addition.to_sym] = add_value.to_i
      puts "#{addition} has been added with a value of #{value}."
  else
    puts "That item already exists! Its value is #{hash[addition.to_sym]}."
end

因此,如果我添加项目,重新运行程序并选择显示而不是添加,我应该如何显示最后一个添加项目。感谢。

2 个答案:

答案 0 :(得分:1)

以下是您可以使用的代码。它利用yaml来存储哈希值。

require 'yaml'

file = '/tmp/test.yml'
if File.exists?(file)
  hash = YAML::load_file(file)  # load yaml
else
  hash = Hash.new
end

puts "Type 'add' to add an item to the hash"
choice = gets.chomp.downcase

if choice == 'add'
  puts "What do you want to add?"
  addition = gets.chomp
  if hash[addition.to_sym].nil?
    puts "What value will #{addition} have? (integer)"
    add_value = gets.chomp
    hash[addition.to_sym] = add_value.to_i
    puts "#{addition} has been added with a value of #{add_value}."
  else
    puts "That item already exists! Its value is #    {hash[addition.to_sym]}."
  end
end

File.open(file, 'w') {|f| f.write hash.to_yaml } #store yaml

答案 1 :(得分:-1)

如果我正确理解了这个问题,你想要显示添加的选项。

由于您正在使用该文件并重新运行代码,因此最好在开始时读取文件(并将其存储在哈希值中),并将新项目(key-val)附加到文件。 因此,每当有人添加内容时,请将其附加到文件中。现在,当您在开始时再次读取文件时,它已更新。

如果这不是您的使用案例,请告诉我。