我有一个任意的文件名列表,我想将其排序为哈希值。我想这样做:
## 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" ] } }
如何初始化文件以实现此目的?
答案 0 :(得分:1)
如果总是有两个级别的键,你可以使用Hash.new的块形式来实现:
files = Hash.new {|k,v| k[v] = Hash.new {|k,v| k[v] = [] }}
(另一方面,如果键可以嵌套到任意深度,这要困难得多,因为Hash无法知道不存在的键的值是否应该是哈希值或数组。访问。)