ruby-on-rails - 检查数组的每个元素是否包含在另一个数组的一组值中

标签 ruby-on-rails ruby arrays ruby-on-rails-3

我正在使用 Ruby on Rails 3.0.7,我想检查一个数组的每个元素是否包含在另一个数组中存在的一组值中。

也就是说,我有这些数组:

array1 = [1,3]
array2 = [1,2,3,4,5]

我会检查 array1 中的值是否都存在于 array2 中。 如果至少有一个 array1array2

中的值不同,我应该返回 true

我怎样才能以“好的”Ruby 方式编写代码?

P.S.:我读过这个解决方案,但它是针对 Java 数组的。

最佳答案

最简单的事情是做一个 set intersection看看你从中得到了什么:

intersection = array1 & array2
if intersection.length == array1.length
    # Everything in array1 is in array2
end

如果 array1 有重复项,那当然会失败,因为交集会自动压缩这些。但是我们有 uniq解决这个问题:

intersection = array1 & array2
if intersection.length == array1.uniq.length
    # Everything in array1 is in array2
end

如果您希望数组中有重复项,那么您最好使用 Set 的实例而不是数组:

require 'set'
s1 = Set.new(array1)
s2 = Set.new(array2)

if((s1 & s2) == s1)
    # Everything in array1 is in array2
end

或者使用subset?更好地符合您的意图:

if(s1.subset?(s2))
    # Everything in array1 is in array2
end

与必须一直使用 uniq 相比,使用 sets 将以更少的干扰处理您的重复问题。当然,会有一些额外的开销,但您应该在性能之前优化清晰度(让它工作,然后只有当它太慢时才让它变快)。

关于ruby-on-rails - 检查数组的每个元素是否包含在另一个数组的一组值中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559208/

相关文章:

ruby-on-rails - Ruby on Rails : How to implement search function

ruby - 在ruby中,如何解密由 "crypted"方法加密的字符串

javascript - 选择表数据(对象数组)JS的高性能方法

java - 字节数组的验证

c - 将数组(结构成员)传递给函数

ruby-on-rails - Ruby Module NameError——顺序很重要吗?

ruby-on-rails - 是否有任何免费工具可以让我查看我的 RoR sqlite3 数据库?

ruby - 未初始化的常量 AdminController

Javascript - "history.pushState"将常规 "&"替换为 "&"。如何避免?

ruby-on-rails - 多级 block 方法正在产生问题