我可以在Ruby中组合选择吗? (从嵌套哈希中检索信息)

时间:2015-02-27 11:58:33

标签: ruby-on-rails ruby hash nested

目前我即将学习这种令人敬畏的语言,并希望为在线游戏" Eve Online"建立一个小型计算器。

我正在努力解决这部分代码

orders = Hash.new
orders = {typeid: "type1",  value: {order1: {:stationName=>"Jita IV - Moon 4 - Caldari Navy Assembly Plant", price: 3599.99, volRemain: 28},
                                    order2: {:stationName=>"Jita IV - Moon 4 - Caldari Navy Assembly Plant", price: 3600.00, volRemain: 13}}}
        {typeid: "type2", value: {order3: {:stationName=>"Jita IV - Moon 4 - Caldari Navy Assembly Plant", price: 3500.00, volRemain: 43}}}


p orders.select {|key, value| value[:order1][:price].to_i < 3600}

显然&#34; p orders.select&#34;不起作用。

我想要实现的是为特定的类型检索10个最便宜的价格。

我喜欢这里给出的方法:How do I search within an array of hashes by hash values in ruby?

然而,这迫使我将哈希保持在阵列中然后再次,我无法嵌套它们。

我不想做的事情,就是窝3和#34;。做,关键,值|&#34;,因为(我想至少)它会导致O的复杂性( n ^ 3),这应该是非常糟糕的。

那么有没有办法以智能的方式检索所有:价格 - 某种类型的价值?

感谢所有人提前!

1 个答案:

答案 0 :(得分:2)

我会使用数组:

orders = [
  { type_id: "type1", price: 3599.99, vol_remain: 28, station_name: "Jita IV - Moon 4 - Caldari Navy Assembly Plant" },
  { type_id: "type1", price: 3600.00, vol_remain: 13, station_name: "Jita IV - Moon 4 - Caldari Navy Assembly Plant" },
  { type_id: "type2", price: 3500.00, volRemain: 43, station_name: "Jita IV - Moon 4 - Caldari Navy Assembly Plant" }
]

orders.select { |order| order[:price] < 3600 }
#=> [
#     {:type_id=>"type1", :price=>3599.99, :vol_remain=>28, :station_name=>"Jita IV - Moon 4 - Caldari Navy Assembly Plant"},
#     {:type_id=>"type2", :price=>3500.0, :vol_remain =>43, :station_name=>"Jita IV - Moon 4 - Caldari Navy Assembly Plant"}
#   ]

由于您使用的是Ruby on Rails,您应该使用模型和关联,例如:

class Order < ActiveRecord::Base
  belongs_to :station
end

class Station < ActiveRecord::Base
  has_many :orders
end