如何在Ruby中创建哈希比较字符串,忽略大小写?

前端之家收集整理的这篇文章主要介绍了如何在Ruby中创建哈希比较字符串,忽略大小写?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Ruby中,我想在Hash中存储一些东西,但是我不希望它是区分大小写的.所以例如:
  1. h = Hash.new
  2. h["HELLO"] = 7
  3. puts h["hello"]

这应该输出7,即使情况不同.我可以覆盖哈希的等号方法或类似的东西吗?

谢谢.

解决方法

为了防止这种改变完全破坏程序的独立部分(例如您使用的其他ruby gem),请为不敏感的哈希创建一个单独的类.
  1. class HashClod < Hash
  2. def [](key)
  3. super _insensitive(key)
  4. end
  5.  
  6. def []=(key,value)
  7. super _insensitive(key),value
  8. end
  9.  
  10. # Keeping it DRY.
  11. protected
  12.  
  13. def _insensitive(key)
  14. key.respond_to?(:upcase) ? key.upcase : key
  15. end
  16. end
  17.  
  18. you_insensitive = HashClod.new
  19.  
  20. you_insensitive['clod'] = 1
  21. puts you_insensitive['cLoD'] # => 1
  22.  
  23. you_insensitive['CLod'] = 5
  24. puts you_insensitive['clod'] # => 5

在覆盖作业和检索功能之后,它几乎是蛋糕.创建完整的哈希替代将需要更加细致地处理完整实现所需的别名和其他功能(例如#has_key?和#store).上述模式可以很容易地扩展到所有这些相关的方法.

猜你在找的Ruby相关文章