2016-07-19 3 views
0

Я пытаюсь найти способ пройти следующий тест, но я продолжаю использовать циклы внутри циклов, которые ужасно. Может ли кто-нибудь помочь? Вот тест:Поиск конкретных значений с помощью массива хэшей

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 

В принципе, я хочу, чтобы искать массив хэшей, как так:

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}] 

за все, что имеет значение с совпадающим: ITEM_CODE и: NUMBER_OF_ITEMS и нажать это значение в массив.

Спасибо за любую помощь

ответ

0

Из-за Руби быть полезным

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} 
] 

заканчивается существо:

=> [{ 
    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} 
}] 

, который представляет собой массив длины 1, содержащий хэш длины 2. Вы лучше делать это:

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} 
] 

и запросить его следующим образом:

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}] 
Смежные вопросы