我想添加ruby哈希到一个yaml文件(需要添加值到相同的键重复)



我尝试使用ruby从散列中编写一个yaml文件。并且我能够创建yaml文件。

程序只是我试图创建的一个报告。但真正的问题是,它只适用于一次约会。当我试图在第一天运行时,它的工作完美(yaml文件被正确创建),但是当我试图在另一个日期运行时,yaml文件中的值被覆盖,但实际上我想在yaml中添加新值和前一个值。

我知道我的英语不好,有时有点缺乏创建逻辑。请帮我改正这个问题。代码在

下面
def write_monthly_yaml_file(daily_data)
  @daily = File.exist?(@monthly_yaml_file) ? YAML::load_file(@monthly_yaml_file) : Hash.new
  @daily[Time.parse(@date).strftime("%m")] = daily_data
  File.open(@monthly_yaml_file, "w") {|f| f.puts @daily.to_yaml}  
end

这里的daily_data是哈希值,请任何人帮助我添加新的daily_data与旧的(我需要添加每个值与前一个值,如求和)

谢谢

我假设您想在一个月内有许多条目:

# the line below overwrites the value for the key given
# @daily[Time.parse(@date).strftime("%m")] = daily_data
# will collect all data in an array instead:
(@daily[Time.parse(@date).strftime("%m")] ||= []) << daily_data

在这里,我们创建一个数组作为一个值,除非它存在,并且添加到daily_data值。要使此代码成功运行,请从磁盘中删除现有的yaml文件。

原因是当前有一个daily_data实例与键相关联,并且接口发生了变化。

如果@daily[day]中的数据是您想要添加的数字,请尝试:

 @daily = File.exist?(@monthly_yaml_file) ?   
YAML::load_file(@monthly_yaml_file) : Hash.new
day = Time.parse(@date).strftime("%m")
@daily[day] = (@daily[day] + daily_data)
File.open(@monthly_yaml_file, "w") {|f| f.puts @daily.to_yaml}  

最新更新