【问题标题】:Ruby: Make hash from Hash => SetRuby:从哈希 => 设置哈希
【发布时间】:2009-11-14 21:23:09
【问题描述】:

我有一个连接表,用于查找订单的可用服务;在该表中是utility_id 和company_id。

我想要的是一个组(散列),其中键是实用程序名称,值是相应公司的散列。

我得到了以下...

Service.find(:all).to_set.classify { |service| Utility.find(service.utility_id).name }

...这很好地给了我一个哈希,其中键是实用程序名称,但值是服务记录的 Sets,而不仅仅是公司名称(我不需要实际记录),我不知道如何制作我想要的哈希:

# example of what I would like to have
{"electricity" => {"conEd" => 1, "Dominian" => 2}, "gas" => {"conEd" => 1}} 
# where the key is Utility.name, and the value-hash is {Company.name => Company.id}

我该怎么做?

【问题讨论】:

  • 我对“company-1”的来源感到困惑。如果它只是一个数字序列,您是否宁愿将一个数组作为每个哈希值?所以:{"utility-1" => [company_id, company_id], "utility-2" => [company_id, company_id]}
  • 对不起;我的意思是“company-1”只是一家公司的名称,与另一家“company-2”不同,并不是说它们实际上是在增加价值。以上编辑。

标签: ruby arrays hash set


【解决方案1】:

find(:all) 向我推荐了 Rails,所以假设你在 Utility 和 Service 模型之间有一个正确的 HABTM,这个 sn-p 适用于我的测试环境:

results = Hash.new
Utility.find(:all).each do |utility|
  results[utility.name] = Hash.new
  utility.companies.each do |company|
    results[utility.name][company.name] = company.id
  end
end
results

哪个产生

{"Communications"=>{"InternetCo"=>2, "PhoneCo"=>1}, "Energy"=>{"ElectricCo"=>4, "GasCo"=>3, "OilCo"=>5}}

【讨论】:

  • HABTM 关系(我使用 has_many, :through)实际上在Company 和Utility 之间; Service 是我的加入模型。是的,我正在使用 Rails(忘了提)。我将如何更改您在上面写的内容以使用我的设置?
  • 编辑以符合您的模型对象。
猜你喜欢
  • 2021-02-05
  • 2014-03-03
  • 2012-07-15
  • 2017-02-22
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
相关资源
最近更新 更多