3

我正在使用 ruby​​ 1.9.3,我需要比较两个具有不同密钥格式的哈希。例如,我希望以下两个哈希值相等:

hash_1 = {:date => 2011-11-01, :value => 12}
hash_2 = {"date" => 2011-11-01, "value" => 12}

关于如何在一行代码中比较这两个哈希的任何想法?

4

1 回答 1

3

将具有符号的散列上的键字符串化:

 > hash_1.stringify_keys
=> {"date"=>"2011-11-01", "value"=>12} 

然后比较。因此,您的答案是:

 > hash_1.stringify_keys == hash_2    
=> true

你也可以用另一种方式来做,用符号表示字符串键hash_2而不是把它们串起来hash_1

 > hash_1 == hash_2.symbolize_keys
=> true

如果您希望字符串化/符号化成为永久更改,请使用带有 bang 的版本!stringify_keys!symbolize_keys!分别

 > hash_1.stringify_keys!                # <- Permanently changes the keys in hash_1 into Strings
=> {"date"=>"2011-11-01", "value"=>12}   #    as opposed to temporarily changing them for comparison

参考: http ://as.rubyonrails.org/classes/HashWithIndifferentAccess.html

另外,我猜你的意思是在日期周围加上引号......

:date => "2011-11-01"

...或者,将它们显式实例化为 Date 对象?

:date => Date.new("2011-11-01")

您现在将日期写入的方式设置:date2011-11-01这些当前被解释为一系列整数,它们之间有减法。

那是:

 > date = 2011-11-01
=> 1999                # <- integer value of 2011, minus 11, minus 1
于 2012-03-19T15:00:17.433 回答