2013-02-14 117 views
1

的一个阵列的值替换我有两个阵列:从另一个阵列

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

我想删除的array1那些元素,这是在array2发现,但仅在一个实例。结果数组,array3,必须是这样的:

array3 = [3, 4, 6, 7] 

我想:

array3 = array1 - array2 

,但结果并不理想:

array3 -> [3, 6, 7] 
+0

我已经编辑我的问题 – mahmud 2013-02-14 13:58:43

回答

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 
+0

谢谢。这对我来说很容易理解,而且工作很棒! – mahmud 2013-02-14 14:15:20

+0

一个必要的解决方案是好的,因为它很简单,但注意这是O(n^2)时间,而问题是O(n)。它可以使用辅助哈希来解决。 – tokland 2013-02-14 14:18:04

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] 

为了使片断单纯的功能,你会使用散列#合并/阵列#+而不是哈希#更新/阵列:< <,但由于它是将这些数据结构的性质效率非常低。