V mailing listu se objevil dotaz jak implementovat slovník který není citlivý na velikost písmen. T.j kde h['a']
je stejný prvek jako h['A']
.
Nejjednodušší navržený způsob je předefinovat metodu has_ikey?
takto
class Hash def has_ikey?(key) self.keys.map {|key| key.upcase }.member? key.upcase end end
Velikou nevýhodou tohoto řešení je pomalost, tedy výpočetní naročnost degraduje použití slovníku.
Jiným řešením je změnit chování Ruby nastavením proměnné $=
$= = true # case insensitive
tento způsob však ovlivní všechny části Ruby.
Asi nejlepším řešením je definovat si vlastní třídu objektů s požadovanou vlastností
class CIHash < Hash alias get_old [] alias set_old [] def [](key) return get_old(key.to_s.upcase) end def []=(key, value) return set_old(key.to_s.upcase, value) end end