Ruby 中的哈希可以被任何东西索引,包括其他哈希。所以:
classifications = {}
classifications[ {warm:false, sunny:false, windy:false} ] = "cold-drizzle"
classifications[ {warm:false, sunny:true, windy:false} ] = "winter-wonderland"
p classifications
#=> {
#=> {:warm=>false, :sunny=>false, :windy=>false}=>"cold-drizzle",
#=> {:warm=>false, :sunny=>true, :windy=>false}=>"winter-wonderland"
#=> }
p classifications[ {sunny:false, windy:false, warm:false } ]
#=> "cold-drizzle"
请注意我在读取值时用于散列键的任意顺序。您不必使用与编写时完全相同的哈希对象(就像使用 Lua 一样),您只需使用数据等效的哈希即可。
由于 Ruby 方法调用的语法糖,你甚至可以省略上面所有的{
and }
(除了声明散列的地方):
classifications[ warm:false, sunny:false, windy:true ] = "stormy"
p classifications[ warm:false, sunny:false, windy:false ]
#=> "cold-drizzle"
如果您想更简洁但描述性更少,您也可以只使用数组作为键:
classifications = {}
classifications[ [false,false,false] ] = "cold-drizzle"
classifications[ [false,true, false] ] = "winter-wonderland"
p classifications[ [false,true,false] ]
#=> "winter-wonderland"
请注意,与将哈希作为键一样,您不需要使用完全相同的对象来索引哈希,只需一个被认为相等的对象即可。