2012-03-28 111 views
0

修改散列阵列中的修改在数组中的哈希值红宝石使用GSUB

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

我想修改与GSUB数组的名字是details2

当我这样做的哈希qty2:

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

我得到所有修改后的值。

哈希qty2 =>“1 en su sucursal”需要更改为qty2 =>“1”,所以使用.gsub(/ [^ \ d] /,'')可以完成,但怎么做我改变了哈希值!?考虑到它的一系列哈希。

尝试这样做:

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

一点也不清楚。你想得到什么?你得到了什么? – 2012-03-28 22:28:17

+0

@Sergio the Hash qty2 =>“1 en su sucursal”需要更改为qty2 => 1,因此使用.gsub(/ [^ \ d] /,'')可以完成,但是如何更改散列的值!?考虑到它的一系列哈希。 – ingalcala 2012-03-28 22:31:41

+0

在下面回答。 – 2012-03-28 22:34:40

回答

2

如果你想就地更新项目,那么你不需要collect。有一个更简单的方法。试试这个:

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

这应该替换你的字符串就地。

+0

太棒了!所以每个更新数组中的值:O。谢啦。 – ingalcala 2012-03-28 22:36:16

+3

'each'不会更新任何内容。它只是迭代元素。 'gsub!'进行更新。 – 2012-03-28 22:37:15