我有散列数组(#1),看起来像这样:红宝石数组值串
data = [{"username"=>"Luck", "mail"=>"[email protected]", "active"=>0}]
,我想用下面的哈希值的阵列来比较(#2):
test = [{"username"=>"Luck", "mail"=>"[email protected]", "active"=>"0"}]
其中#1我从我的黄瓜场景(我最不希望出现的场景)中的mysql2(实际上是在数据库中) 和#2从数据库中获得的数据。
根据定义#2必须是#1,所以我遵循与此代码的子集:
data = data.to_set
test = test.to_set
assert test.subset?(data)
的问题是在数据阵列的active
值不为一个字符串。在data
的情况下,是Fixnum
,在test
的情况下,是String
。
我需要一个解决方案,即使对于数组中的多个散列也可以工作。 (由于数据库可以返回结果的多行)这就是为什么我转换成集,并使用subset?
从我得到了其他问题:
data.each do |obj|
obj.map do |k, v|
{k => v.to_s}
end
end
然而,它没有为我工作。有任何想法吗?
假设你可以做:
- 所有
data
键将永远是字符串。 test
中的所有键将始终为字符串。并始终与data
相同。test
中的所有值将始终为字符串。
是什么,如果该类型不是一个字符串?你能用它显示的数据类型更新你的例子吗?你的目标是能够说数据==测试? 'subset'从哪里来? – Anthony 2014-11-03 00:11:20
更正了这个问题,以提供您正在讨论的答案。但对于初学者来说,获取数据==测试会很好。 – 2014-11-03 00:13:25
'test'是'data'的子数组,当且仅当'(test-data).empty? => true'。那是你要的吗?请注意,如果'h'和'g'是散列,'h == g => true'当且仅当它们具有相同的键和值时,无论键顺序如何。 – 2014-11-03 00:41:41