我有一個代表對象的哈希數組作爲對API調用的響應。我需要從一些哈希中提取數據,並且一個特定的鍵用作哈希對象的ID。我想將數組轉換爲一個散列,其中的鍵爲ids,值爲該id的原始散列。將哈希數組轉換爲散列哈希,通過哈希的屬性進行索引
這裏就是我說的:
api_response = [
{ :id => 1, :foo => 'bar' },
{ :id => 2, :foo => 'another bar' },
# ..
]
ideal_response = {
1 => { :id => 1, :foo => 'bar' },
2 => { :id => 2, :foo => 'another bar' },
# ..
}
有兩種方法我能想到這樣做的。
- 地圖數據到
ideal_response
(下同) - 使用
api_response.find { |x| x[:id] == i }
每個我需要訪問記錄。 - 我不知道的一種方法,可能涉及到一種使用
map
本地生成散列的方法。
我映射的方法:
keys = data.map { |x| x[:id] }
mapped = Hash[*keys.zip(data).flatten]
我不禁覺得有這樣做的更好的性能,更整潔的方式。當需要訪問的記錄數量非常少時,選項2非常有效。映射在這裏非常出色,但是當響應中有很多記錄時它就開始崩潰。謝天謝地,我不希望有超過50-100條記錄,所以映射就足夠了。
在Ruby中有這樣做的更智能,更整潔或更高效的方式嗎?
這比我在性能和整潔方面的映射要好,但通過data [id] [0]或data [id] .first訪問記錄有點麻煩。不過,我在這一點上挑剔。讓我們看看是否有其他人關心在戒指中戴帽子。 – coreyward 2011-01-20 23:50:39