我正在处理一个练习题,要求我创建一个<_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很新,所以请耐心等待。有谁知道更好的解决方案?
答案 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"]}