如何在已经分配给某些东西的情况下分配新的变量名称?红宝石

chu*_*tsu 1 ruby hash

标题真的不能解释事情.我的情况是我想读取一个文件并将内容放入哈希.现在,我想让它变得聪明,我想创建一个循环,打开目录中的每个文件并将其放入哈希.问题是我不知道如何分配相对于文件名的名称.例如:

hash={}  
Dir.glob(path + "*") do |datafile|
  file = File.open(datafile)
  file.each do |line|
    key, value = line.chomp("\t")
    # Problem here is that I wish to have a different
    # hash name for every file I loop through
    hash[key]=value
  end
  file.close
end
Run Code Online (Sandbox Code Playgroud)

这可能吗?

j.p*_*.p. 8

为什么不使用其键是文件名(在您的情况下为"datafile")并且其值是您插入数据的哈希值的哈希?

hash = Hash.new { |h, key| h[key] = Hash.new }  
Dir.glob(path + '*') do |datafile|
  next unless File.stat(datafile).file?
  File.open(datafile) do |file|
    file.each do |line|
      key, value = line.split("\t")
      puts key, value
      # Different hash name for every file is now hash[datafile]
      hash[datafile][key]=value
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 您可以将`File.open`和`file.each`替换为`File.foreach(datafile)do | line |` (2认同)