接受哈希键并返回多个值的函数?

时间:2017-02-17 17:42:29

标签: ruby-on-rails ruby

我正在处理一个练习题,要求我创建一个<_p>的group_by_owners函数

&#34;接受包含每个文件名的文件所有者名称的哈希。

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

例如,哈希

{'Input.txt' => 'Randy', 'Code.py' => 'Stan', 'Output.txt' => 'Randy'}

group_by_owners方法应返回

{'Randy' => ['Input.txt', 'Output.txt']`, `'Stan' => ['Code.py']}

到目前为止,我无法通过任何事情。我希望我应该接受哈希,所以我实现了一个新的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)

我尝试了其他做法,包括

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'])

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

1 个答案:

答案 0 :(得分:3)

关键是:方法 接受 哈希,您不必构建哈希,只需将其传递给方法即可。你的方法只需要处理传递的参数。

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

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"]}