首页 > 解决方案 > 如何返回包含每个所有者名称的文件名数组的哈希?

问题描述

有一个名为“files”的哈希,如下所示:

files = {
       'file1.txt' => 'John',
       'file2.rb'  => 'Andrew',
       'file3.txt' => 'John'
}

预期结果:

将此哈希作为参数并返回包含相应所有者的文件数组的哈希的方法。例如

{
  'John'   =>  ['file1.txt','file3.txt'],
  'Andrew' =>  ['file2.rb']
}


标签: ruby-on-railsruby

解决方案


在这里,您要遍历文件哈希,并且对于每个键值对,您需要检查它是否已存在于新哈希中,然后您只想将文件名添加到数组中,或者创建一个新的键值对。

def change_hash(file_hash)
  new_hash = {}
  file_hash.each do |file_name, person|
    if new_hash[person]
      new_hash[person] << file_name
    else
      new_hash[person] = [file_name]
    end
  end
  new_hash
end

如果您对此感到困惑,您想了解如何在 Ruby 中操作散列(和数组)。如果您还有其他问题,请告诉我。


推荐阅读