接受散列键并返回多个值的函数?

Mis*_*Cal 2 ruby ruby-on-rails

我正在研究一个练习题,要求我创建一个 group_by_owners 函数

“接受包含每个文件名的文件所有者名称的哈希。

以任何顺序返回包含每个所有者名称的文件名数组的散列。

例如,对于哈希

{'Input.txt' => 'Randy', 'Code.py' => 'Stan', 'Output.txt' => 'Randy'}
Run Code Online (Sandbox Code Playgroud)

group_by_owners方法应该返回

{'Randy' => ['Input.txt', 'Output.txt']`, `'Stan' => ['Code.py']}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我无法通过任何事情。我希望我应该接受一个散列,所以我实现了一个新的files = {}has 并输入了适当的值。但我得到的只是一个语法错误

module FileOwners
  def self.group_by_owners(files)
    files = {}
    files['Randy'] << 'Input.txt' << 'Output.txt'
    files['Stan'] << 'Code.py'
  end
end


puts FileOwners.group_by_owner(files)
Run Code Online (Sandbox Code Playgroud)

我尝试过其他做法,包括

module FileOwners
  def self.group_by_owners(files)
    files = {
      'Randy' => 'Input.txt',
      'Randy' => 'Output.txt'
      'Stan' => 'Code.py'
    }
  end
end


puts FileOwners.group_by_owners(files['Randy'])
Run Code Online (Sandbox Code Playgroud)

但我仍然遇到错误。我完全被困住了。我显然对 Ruby 还很陌生,所以请耐心等待。有谁知道更好的解决方案?

And*_*eko 6

重点是:方法接受散列,您不必构建散列,只需将其传递给方法。您的方法必须只处理传递的参数。

当我开始编码时,我和你现在的想法一样;)

def group_by_owners(files)
  better_hash = Hash.new { |hash, key| hash[key] = [] }
  files.each_with_object(better_hash) {|(k, v), hash| hash[v] << k}
end

group_by_owners({'Input.txt' => 'Randy', 'Code.py' => 'Stan', 'Output.txt' => 'Randy'})
#=> {"Randy"=>["Input.txt", "Output.txt"], "Stan"=>["Code.py"]}
Run Code Online (Sandbox Code Playgroud)