我有一个数组:
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
我该怎么做?
答案 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)