替换另一个数组的一个数组值

时间:2013-02-14 13:47:49

标签: ruby

我有两个数组:

array1 = [3, 4, 4, 5, 6, 7, 8, 8]
array2 = [4, 5, 8, 8]

我想删除array1array2的{​​{1}}元素,但只能在一个实例中删除。生成的数组array3必须如下:

array3 = [3, 4, 6, 7]

我试过了:

array3 = array1 - array2

但结果并不令人满意:

array3 -> [3, 6, 7]

2 个答案:

答案 0 :(得分:1)

这可能不是做你想做的最有效的方式,但它有效:

array1 = [3, 4, 4, 5, 6, 7, 8, 8]
array2 = [4, 5, 8, 8]
array2.each do |item|
    index = array1.index item
    array1.delete_at index if index
end

答案 1 :(得分:0)

只是为了表明其他做事方式。使用Facets(只是为了方便获得直方图),我写了这个。为O(n):

require 'facets'

array3 = array1.reduce([array2.frequency, []]) do |(h, output), x|
  if h[x] && h[x] > 0
    [h.update(x => h[x] - 1), output]
  else
    [h, output << x] 
  end
end[1]
#=> [3, 4, 6, 7]

为了使代码段纯粹起作用,你可以使用Hash#merge / Array#+而不是Hash#update / Array:&lt;&lt;,但由于这些数据结构的性质,它将非常低效。