如何为每个所有者名称返回包含文件名数组的哈希?

问题描述 投票:-2回答:2

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

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

预期结果:

一种使用此哈希作为参数并返回包含以下内容的文件数组的哈希的方法各自的所有者。对于例如

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


ruby-on-rails ruby
2个回答
0
投票

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

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中操作哈希(和数组)。让我知道是否还有其他问题。


0
投票
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"]}
© www.soinside.com 2019 - 2024. All rights reserved.