Rad*_*dek 4 ruby arrays comparison
还有其他simple,nicer方法吗?
require 'pp'
a1 = ["02/28/10","Webinars","131","0","26 Feb 2010","0","3d, 8h, 49m, 18s"]
a2 = ["02/20/10","Webinars","131","9","26 Feb 2010","0","3d, 8h, 49m, 18s"]
def compare(array1,array2,ignore)
tmp1 = Array.new
tmp2 = Array.new
0.upto(array1.length-1) {|index|
if !ignore.include?(index)
tmp1 << array1[index]
tmp2 << array2[index]
end
}
if tmp1 == tmp2
return true
else
return false
end
end
pp a1
pp a2
puts
puts compare(a1,a2,[0,3])
Run Code Online (Sandbox Code Playgroud)
而输出是
["02/28/10", "Webinars", "131", "0", "26 Feb 2010", "0", "3d, 8h, 49m, 18s"]
["02/20/10", "Webinars", "131", "9", "26 Feb 2010", "0", "3d, 8h, 49m, 18s"]
true
Run Code Online (Sandbox Code Playgroud)
最简单的代码(需要Ruby 1.8.7或更高版本):
def compare(array_a, array_b, ignore_list)
array_a.zip(array_b).each_with_index.all? do |a, b, idx|
a == b or ignore_list.include? idx
end
end
Run Code Online (Sandbox Code Playgroud)
我怀疑它也会更快(因为它使用单个拉链而不是单独询问每个项目的数组) - 尽管这可能不是速度很重要的情况.
顺便说一下,几乎任何时候我都是直接索引some_array[i]Ruby中的数组(比如),而不是使用更高阶的方法,比如map或each,我把它作为一个标志,我可能在标准库中遗漏了一些东西,算法的效率可能低于高度优化的库函数.