我有散列數組(#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