Ruby - 获取array1中array2中的所有元素

时间:2013-12-26 04:49:12

标签: ruby arrays

a1 = [1, 2, 2, 1, 4]
a2 = [1, 2, 3]

预期产出:

[1, 2, 2, 1]

a1中的四个元素是a2。

a1 & a2只给我uniq元素[1, 2],但我需要非uniq元素。

有没有比做以下更好的方法,我认为效率不高:

a1.select{|ele| a2.include?(ele)}

3 个答案:

答案 0 :(得分:4)

a1 - (a1 - a2)
# => [1, 2, 2, 1]

答案 1 :(得分:1)

我会加我的¢2。如果您可能在大型阵列上进行几次操作,@ sawa的方法绝对是您的选择:

require 'benchmark'

n = 1_000
a1 = 1_000.times.map { rand(1..100) }
a2 = 1_000.times.map { rand(5..95) }
Benchmark.bm do |x|
  x.report {
    n.times do
      a1 - (a1 - a2) 
    end
  }
  x.report {
    n.times do
      a1.keep_if { |xx| a2.include? xx }
    end
  }
end

结果:

#     user     system      total        real
# 0.340000   0.000000   0.340000 (  0.424604)
# 5.590000   0.010000   5.600000 (  6.438095)

但如果小阵列上有很多减法:

- n = 1_000
- a1 = 1_000.times.map { rand(1..100) }
- a2 = 1_000.times.map { rand(5..95) }
+ n = 100_000
+ a1 = 10.times.map { rand(1..100) }
+ a2 = 10.times.map { rand(5..95) }

相反看起来更合适:

#     user     system      total        real
# 0.550000   0.010000   0.560000 (  0.551997)
# 0.150000   0.000000   0.150000 (  0.151695)

答案 2 :(得分:0)

这是一个选项

a1.keep_if { |x| a2.include? x }