如何在Ruby中比较两个数组

时间:2018-02-12 22:56:21

标签: ruby

我正在尝试比较两个数组:

compareFrom = []
compareTo = ["John Doe", "Eric Schulz", "Tom Jerry"]

我尝试了以下内容:

arrayField1 = []
for r in empData
  compareFrom << r.employeeName
end

if compareFrom.include?(compareTo)
  #yes got it
end

即使falsecompareFrom具有相同的值,我也无法理解为什么会得到compareTo

我需要在代码中更改哪些内容吗?

2 个答案:

答案 0 :(得分:2)

Array#include?仅测试数组中一个元素的成员资格。您的compare_from.include?(compare_to)测试compare_to是否为compare_from的元素,并且例如如果truecompare_from,则返回[1, 2, 3, ["John Doe", "Eric Schulz", "Tom Jerry"], 5]

如果您想查看compare_tocompare_from的所有元素是否都在compare_to.all? { |element| compare_from.include?(element) }中,(compare_from & compare_to).size == compare_to.size是惯用且清晰的,但速度很慢;塔德曼require 'set' Set[compare_to].subset?(Set[compare_from]) 的表现要高得多。第三种选择,在谈到子集时,我可能更喜欢的是使用集合:

X-Powered-By: PHP/5.3.29

答案 1 :(得分:1)

此代码归结为:

var steps = [0, 2000, 3000, 5000, 7500, 10000, 15000, 20000, 300000];

$("#slider").slider({
range: "min",
value: 0,
min: 0,
max: steps.length,
step: 1,
slide: function(event, ui) {
    $("#amount").text(steps[ui.value]);
}
});

compare_from = emp_data.map(&:employee_name) 数组中的每个项目上调用employee_name方法并返回包含结果的新数组。您可以使用emp_data轻松测试两个阵列上的重叠,以找到交叉点:

&

如果该数组compare_to = ["John Doe", "Eric Schulz", "Tom Jerry"] common = compare_from & compare_to 有任何条目,那么您就有匹配。