Ruby изменяет хеш-значение в массиве с помощью gsub

изменить хэши в массиве

{:sku=>"TP-PA211", :desc=>"description", :qty=>"", :qty2=>"1 en su sucursal", :price=>"30.02 D"}

Я хочу изменить хеш qty2 с помощью gsub имя массива details2

когда я делаю это:

details2.collect {|item| item[:qty2].gsub(/[^\d]/, '') }

Я получаю все измененные значения.

Хэш qty2=>"1 en su sucursal" необходимо изменить на qty2=>"1" , поэтому с помощью .gsub(/[^\d]/, '') это можно сделать, но как изменить значение из хэша!? учитывая его массив хэшей.

попробовал это:

details2{|item| item[:qty2] = item[:qty2].gsub(/[^\d]/, '') }

person ingalcala    schedule 28.03.2012    source источник
comment
Это вообще не ясно. Что вы хотите получить? Что вы получаете?   -  person Sergio Tulentsev    schedule 29.03.2012
comment
@Sergio Hash qty2=›1 en su sucursal необходимо изменить на qty2=›1, поэтому с помощью .gsub(/[^\d]/, '') это можно сделать, но как мне изменить значение хэш!? учитывая его массив хэшей.   -  person ingalcala    schedule 29.03.2012


Ответы (1)


Если вы пытаетесь обновить элементы на месте, вам не нужен collect. Есть более простой способ. Попробуй это:

details2.each {|item| item[:qty2].gsub!(/[^\d]/, '') }

Это должно заменить ваши строки на месте.

person Sergio Tulentsev    schedule 28.03.2012
comment
классно! поэтому каждый обновляет значения в массиве: O. Спасибо чувак. - person ingalcala; 29.03.2012
comment
each ничего не обновляет. Он просто повторяет элементы. gsub! выполняет обновление. - person Sergio Tulentsev; 29.03.2012