使用 Ruby 的 zip/Hash 功能来构建此数据结构



我所做的事情表面上听起来微不足道。我想采取ActiveRecord对象,并建立一个散列出来,其中包含以下格式:

取@records并将其转换为:

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

我正在尝试使用类似的东西来做到这一点:

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

,但似乎不能得到正确的语法,使其看起来像上面的例子。

**更新以更清楚地显示请求的内容**

让我举一个具体的例子。我有一组猫。这是从具有两个属性的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]

这样更有意义吗?

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

最新更新