2012-10-03 102 views
1

我有一個哈希數組,其中每個哈希包含少量的鍵。我想檢查是否有任何數量的哈希具有相同的user_id。如何檢查哈希數組中的唯一性

一個例子是這樣的:

[ {:id => 1, :user_id => 2, :location => nil, :facility_id => nil} 
    {:id => 3, :user_id => 2, :location => 'China', :facility_id => 20} ] 

我需要這在這種情況下,其中兩個散列的共同點爲user_id返回true。我如何做到這一點'紅寶石的方式'?

回答

3

試試這個:

a.map{|t| t[:user_id]}.uniq.size == a.size 
+0

工作就像一個魅力。謝謝 – Bholzer

4
arr = [ {:id => 1, :user_id => 2, :location => nil, :facility_id => nil}, 
    {:id => 3, :user_id => 2, :location => 'China', :facility_id => 20} ] 
p arr != arr.uniq{|u| u[:user_id]} #=> true 
+1

我的想法幾乎是相同的,但一個音符 - 比較尺寸要足夠。比較整個陣列會更慢。 –

+1

@izomorphius Ruby似乎[爲此優化](http://rxr.whitequark.org/mri/source/hash.c?v=1.9.1-p431#1449)(1463行)。但總的來說,你是對的。 – steenslag

+0

此優化僅適用於假情況。想象一下,你有一個擁有10個不同user_id-s的散列的數組,每個散列的大小爲數百兆字節。 –