2016-07-19 6 views
0

Ich versuche einen Weg zu finden, um den folgenden Test zu bestehen, aber ich benutze Schleifen in Schleifen, die schrecklich sind. Kann jemand helfen? Hier ist der Test:Suche nach bestimmten Werten mit einem Array von Hashes

require 'spec_helper' 

describe Promotion_Check do 

    let(:check) { Promotion_Check.new rules_list } 
    let(:item_rule) { {rule_type: "item", item_code: 1, number_of_items: 2, new_item_price: 8.50} } 
    let(:total_rule) { {rule_type: "total", total_price_break: 60.00, discount_percentage: 10} } 
    let(:rules_list) { [ 1 => item_rule, 2 => total_rule ] } 

    describe "#applicable_item_rules" do 
    it "finds the rules that apply to the baskets items" do 
     item_code = 1 
     count = 2 
     expect(check.applicable_item_rules(item_code, count)).to eq [item_rule] 
    end 
    end 
end 

Grundsätzlich möchte ich ein Array von Hashes wie so suchen:

rules_list = [ 1 => {rule_type: "item", item_code: 1, number_of_items: 2, new_item_price: 8.50}, 2 => {rule_type: "item", item_code: 2, number_of_items: 4, new_item_price: 7.50}] 

für alles, was einen Wert mit passendem hat: item_code und: NUMBER_OF_ITEMS und schieben diesen Wert in ein Array.

Vielen Dank für jede Hilfe

Antwort

0

Aufgrund von Ruby hilfreich sein

rules_list = [ 
    1 => {rule_type: "item", item_code: 1, number_of_items: 2, new_item_price: 8.50}, 
    2 => {rule_type: "item", item_code: 2, number_of_items: 4, new_item_price: 7.50} 
] 

endet als:

=> [{ 
    1=>{:rule_type=>"item", :item_code=>1, :number_of_items=>2, :new_item_price=>8.5}, 
    2=>{:rule_type=>"item", :item_code=>2, :number_of_items=>4, :new_item_price=>7.5} 
}] 

, die ein Array der Länge 1 einen Hash der Länge 2. Sie enthält Es ist besser, dies zu tun:

rules_list = [ 
    {rule_type: "item", item_code: 1, number_of_items: 2, new_item_price: 8.50}, 
    {rule_type: "item", item_code: 2, number_of_items: 4, new_item_price: 7.50} 
] 

und fragen Sie es so:

rules_list.select { |rule| rule[:item_code] == 1 && rule[:number_of_items] == 2 } 

=> [{:rule_type=>"item", :item_code=>1, :number_of_items=>2, :new_item_price=>8.5}]