【问题标题】::thingo v 'thingo' with values in ruby hash:thingo v 'thingo' 具有红宝石哈希值
【发布时间】:2012-07-13 10:28:30
【问题描述】:

我有一个来自数据库查询的哈希值:

a1 = {:a => 1, :b => 2 }

以及第三方库的另一个哈希值:

b1 = {'a' => 1, 'b' => 2 }

我想看看a1 是否有'a',我想将其视为:a。那是怎么做的?所以我可以检查a1中的b1是否缺少任何键。

我想要的是将密钥 'a' 视为与密钥 :a 相同。

【问题讨论】:

  • 导轨?很难说,我在 RhoMobile。

标签: ruby hash key


【解决方案1】:

您可以使用to_sym

a.has_key?('a'.to_sym)

【讨论】:

  • 请注意,如果您碰巧有{:a => 1, "a" => 2},这可能会出现意外行为。
【解决方案2】:

给定哈希h,您有几个选项:

  • 您可以将所有键转换为字符串:

    Hash[h.map { |k, v| [k.to_s, v] }]
    
  • 您可以将所有键转换为符号:

    Hash[h.map { |k, v| [k.to_sym, v] }]
    
  • 您可以使用HashWithIndifferentAccess,它来自ActiveSupport(Rails 免费提供):

    HashWithIndifferentAccess.new(h)
    

【讨论】:

    【解决方案3】:

    这将为您提供来自b1 的(字符串)键数组,这些键在a1 中不存在(作为符号键):

    b1.keys - a1.keys.map { |key| key.to_s }
    

    你可以这样做:

    missing = b1.keys - a1.keys.map { |key| key.to_s }
    missing.each do |key|
        a1[key.to_sym] = b1[key]
    end
    

    假设b1 始终只有字符串键,您只担心a1 缺少来自b1 的键/值对,您的目标是将缺失的对插入a1(带有符号键),从您的问题来看,所有这些听起来都是正确的。如果这些假设中的任何一个是错误的,这至少应该让你开始。

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 2019-04-23
      • 1970-01-01
      相关资源
      最近更新 更多