2015-08-18 3 views
-3

Вот массив. Мне нужно, чтобы отвергнуть блок массива, который ITEM_ID == 200.Как отклонить блок массива с определенным условием

:invoice_lines=>[{:amount=>"60.00", :description=>"repair call",:id=>"10138500", :item_id=>"80062", :price=>"60.0000000000"}, 
{:amount=>"9.83", :description=>"Tax", :id=>"10138501", :item_id=>"200", :price=>"8.1875000000"}, 
{:amount=>"60.00", :description=>"Wireless Router", :id=>"10138502", :item_id=>"80060", :price=>"60.0000000000"}] 

Я пытаюсь таким образом, но не может получить результат.

i = 0 
    num = invoice[:invoice_lines].length 
    items = [] 
    while i < num 
    if invoice[:invoice_lines][i][item_id] == 200 
     invoice[:invoice_lines].delate_at(i) 
    end 
    i += 1 
    end 

Любая помощь будет оценена по достоинству.

+4

Интересно, может ли быть [метод, который делает именно это) (http://ruby-doc.org/core-2.2.0/Array.html#method-i-reject-21)? – ndn

+2

Попробуйте 'num.reject {| n | n [: item_id] == "200"} 'и изменить' num = invoice [: invoice_lines] .length' на 'num = invoice [: invoice_lines]' – Pavan

+0

'ruby-on-rails' был удален? – RSB

ответ

1

Попробуйте

array = [] 

invoice[:invoice_lines].each do |line| 
    array << line unless line[:item_id] == "200" 
end unless invoice[:invoice_lines].blank? 

array 

array возвратит все строки счетов-фактуру с item_id не равен 200

или

Как уже отмечался в комментариях по NDN, вы можете использовать reject, если вы хотите удалить хеши от invoice[:invoice_lines], http://ruby-doc.org/core-2.2.0/Array.html#method-i-reject-21

Надеюсь, что это поможет!

Смежные вопросы