数组:创建更改的数组副本

时间:2011-07-15 15:03:54

标签: ruby

我有一个数组:

array1 = [1,2,3,4,5,:value => 'value']

我想创建第二个数组,谁是第一个数组减去:value元素的副本(另外:我不知道元素的位置)

#expected result
array1 = [1,2,3,4,5,:value => 'value']
array2 = [1,2,3,4,5]

#my failure attempt
array2 = array1.delete(:value) # => nil

我该怎么做?

5 个答案:

答案 0 :(得分:2)

你可以试试这个

array2 = array1.reject{|a| a.is_a?(Hash) && a[:value]}

因为@mu太短说这会更安全:

array2 = array1.reject{|a| a.is_a?(Hash) && a.has_key?(:value)}

或者

array2 = array1 - {:value => "value"}

答案 1 :(得分:1)

如果你的数组有一个散列作为其成员之一(array1 = [1,2,3,4,5,{:value => 'value'}])并且你想要删除该成员:

array2 = array1.reject{|a| a.is_a?(Hash)} # => array2 will equal [1,2,3,4,5]

如果你想摆脱一个Hash成员并且密钥为:value,你可以将它添加到拒绝块中:

array2 = array1.reject{|a| a.is_a?(Hash) && a.key?('value')}

答案 2 :(得分:0)

似乎很简单:

array2 = array1[0..-2]

答案 3 :(得分:0)

或者,如果您不确定数组末尾是否包含:value键,请确保仅删除:value:

array1.delete(:value)

答案 4 :(得分:0)

如果最后一个元素是哈希值,那么另一个干净的解决方案就是弹出:

array1.pop if array1.last.is_a?(Hash)