比较两个哈希数组并返回新对象

时间:2015-01-07 21:05:44

标签: ruby arrays hash

我有两个哈希数组。

burgers = [
            {:id => 1, :name => "cheese burger"},
            {:id => 2, :name => "royale"},
            {:id => 3, :name => "big mac"},
            {:id => 4, :name => "angus beef"}
          ]

eaten =   [
            {:burger_id => 1},
            {:burger_id => 2}
          ]

我想返回一个数组或未使用的汉堡,其中burgers[:id]不等于eaten[:burger_id]。在burgers_not_eaten_method中,我有预期的返回值。

def burgers_not_eaten
  #Not sure how to compare burger[:id] with eaten[:burger_id]
  burgers.reject { |burger| burger[:id] == #eaten burger_id }
  # Expected:  [{:id => 3, :name => "big mac"},{:id => 4, :name => "angus beef"}]
end

1 个答案:

答案 0 :(得分:5)

你很接近,为了方便我将所有“吃过的”id锁定到一个数组中,并检查是否包含在该数组中,如下所示:

BURGERS = [
            {:id => 1, :name => "cheese burger"},
            {:id => 2, :name => "royale"},
            {:id => 3, :name => "big mac"},
            {:id => 4, :name => "angus beef"}
          ]

EATEN = [
          {:burger_id => 1},
          {:burger_id => 2}
        ]

def burgers_not_eaten
  eaten_ids = EATEN.map { |e| e[:burger_id] }
  BURGERS.reject { |burger| eaten_ids.include?(burger[:id]) }
end

burgers_not_eaten
# => [{:id=>3, :name=>"big mac"}, {:id=>4, :name=>"angus beef"}]