加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:52:12 所属栏目:百科 来源:网络整理
导读:在 Ruby中,我想在Hash中存储一些东西,但是我不希望它是区分大小写的.所以例如: h = Hash.newh["HELLO"] = 7puts h["hello"] 这应该输出7,即使情况不同.我可以覆盖哈希的等号方法或类似的东西吗? 谢谢. 解决方法 为了防止这种改变完全破坏程序的独立部分(例
在 Ruby中,我想在Hash中存储一些东西,但是我不希望它是区分大小写的.所以例如:
h = Hash.new
h["HELLO"] = 7
puts h["hello"]

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

谢谢.

解决方法

为了防止这种改变完全破坏程序的独立部分(例如您使用的其他ruby gem),请为不敏感的哈希创建一个单独的类.
class HashClod < Hash
  def [](key)
    super _insensitive(key)
  end

  def []=(key,value)
    super _insensitive(key),value
  end

  # Keeping it DRY.
  protected

  def _insensitive(key)
    key.respond_to?(:upcase) ? key.upcase : key
  end
end

you_insensitive = HashClod.new

you_insensitive['clod'] = 1
puts you_insensitive['cLoD']  # => 1

you_insensitive['CLod'] = 5
puts you_insensitive['clod']  # => 5

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读