如何比较两个数组的内容?

时间:2011-04-01 13:35:29

标签: ruby-on-rails ruby arrays

我正在比较邮政编码。

我有三个常用的邮政编码:

ZIP_MORRIS
ZIP_UNION
ZIP_ESSEX

我想看看用户是否在Object的数组中,其中一个包含在其中一个。

我试过了:

ZIP_UNION.sort{|x,y| y <=> x} <=> Email.find(3).distributions.map(&:zip_code).uniq.compact.sort{|x,y| y <=> x}

但不幸的是,这只是映射了所有的邮政编码,所以如果我在不同的县选择一个额外的邮政编码,那么它就无法正确地比较它们。

我认为最好的解决方案是比较用户生成的拉链的值,看看阵列中是否存在一个ZIP_COUNTY 中的所有拉链。

某种迭代器会遍历所有拉链并确保用户的zip包含或不包含zip组中的每个zip。

有什么想法吗?

4 个答案:

答案 0 :(得分:74)

您可以执行数组差异,如果结果是空数组,则2个数组包含相同的元素:

>> [1,2,3]-[3,1,2] #=> []

如果你还剩下元素,那么第一个数组的所有元素都不会出现在第二个元素中:

>> [1,2,5]-[3,1,2] #=> [5]

答案 1 :(得分:8)

下面我正在使用全部?数组上的运算符,如果数组中的所有项都为我传入的块返回true,则返回true。

my_zip = [1,2,3,4,5,6]
[2,3,5].all?{|z| my_zip.include?(z)}
=> true 
[20,3,5].all?{|z| my_zip.include?(z)}
=> false

您只需将其更改为用户的邮政编码

答案 2 :(得分:6)

> [1,2,3] <=> [1,2,3]
=> 0
> [1,2,3] <=> [2,2,3]
=> -1
> [1,2,3] <=> [3,2,3]
=> -1
> [1,2,3] <=> [1,3,3]
=> -1
> [1,2,3] <=> [1,1,3]
=> 1

这来自RailsThinker Post并且一直很适合我。

答案 3 :(得分:2)

又一个决定

arr1 = [3,2,1]
arr2 = [2,1,3]

arr1.sort == arr2.sort # => true

arr2 = [2,1,2]

arr1.sort == arr2.sort # => false