有一个名为“ files”的哈希,如下所示:
files = {
'file1.txt' => 'John',
'file2.rb' => 'Andrew',
'file3.txt' => 'John'
}
预期结果:
一种使用此哈希作为参数并返回包含以下内容的文件数组的哈希的方法各自的所有者。对于例如
{
'John' => ['file1.txt','file3.txt'],
'Andrew' => ['file2.rb']
}
这里您要遍历文件哈希,对于每个键值对,您需要检查它是否已存在于新哈希中,然后您只想将文件名添加到数组中,或者创建一个新的键值对。
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中操作哈希(和数组)。让我知道是否还有其他问题。
files.
group_by(&:last). # {"John"=>[["file1.txt", "John"], ["file3.txt", "John"]], "Andrew"=>[["file2.rb", "Andrew"]]}
transform_values { |v| v.map(&:first) } # {"John"=>["file1.txt", "file3.txt"], "Andrew"=>["file2.rb"]}