2013-04-26 47 views
0

我正在做的事情的表面聽起來微不足道。我想利用ActiveRecord對象,並建立一個哈希了出來,包含以下格式:使用Ruby的zip/Hash功能來構建這種數據結構

採取@records並把它變成:

{ record.id => [record.attr1, record.attr2], record.id => [...] }

我試圖做到這一點使用類似的東西來:

Hash[*@records.map{|r| [r.attr1, r.attr2 ]}.flatten] 

但似乎無法得到正確的語法,使其看起來像上面的例子。

**更新,以使更多的CLEAR問什麼**

讓我做一個具體的例子。我有一羣貓。這源於具有兩個屬性的Cat模型:name(字符串)和age(int)。我想通過做檢索貓的數組以下幾點:

# I realize this isn't optimal but that's not the point of this question 
@cats = Cat.all.entries 

我則嘗試將JSON哈希值傳遞給其中散列具有每隻貓實例ID作爲鍵和值是一個數組客戶端與貓的名字和年齡。

在@cats數組上運行適當的Hash/zip組合後,生成的哈希將看起來像。

{ "15" : ["charles", 3], "18" ["winnie", 5], ... } 

我試圖做這樣的事情:

Hash[*@cats.map{|c| [c.name, c.age ]}.flatten] 

這是否更有意義?

+0

你想要什麼輸出? – 2013-04-26 19:26:10

+0

什麼是@記錄?你有「檢查」結果嗎? – sawa 2013-04-26 19:37:18

+0

我更新了問題以包含更多的細節,並進一步闡明瞭我試圖問的是什麼。我希望這更有意義?讓我知道是否需要添加更多細節。 – randombits 2013-04-26 19:45:00

回答

0
def hash_of_arrays(cats) 
    {}.tap do |hashie| 
    cats.each do |cat| 
     hashie[cat.id] = [cat.name, cat.age] 
    end 
    end 
end 

puts hash_of_arrays(@cats).inspect