具有附加值功能的自动嵌套哈希键

时间:2014-05-29 23:46:49

标签: ruby

我有一个任意的文件名列表,我想将其排序为哈希值。我想这样做:

## Example file name 'hello.world.random_hex"

file_name_list.each do |file|
  name_array = file.split('.')
  files[name_array[0].to_sym][name_array[1].to_sym] << file
end

这些键可能不存在,我希望它们能够使用默认值[]自动创建,因此&lt;&lt;按预期工作。最终文件哈希看起来像:

{ :hello => { :world => [ "hello.world.random_hex", "hello.world.other_random_hex" ] } }

如何初始化文件以实现此目的?

1 个答案:

答案 0 :(得分:1)

如果总是有两个级别的键,你可以使用Hash.new的块形式来实现:

files = Hash.new {|k,v| k[v] = Hash.new {|k,v| k[v] = [] }}

(另一方面,如果键可以嵌套到任意深度,这要困难得多,因为Hash无法知道不存在的键的值是否应该是哈希值或数组。访问。)