我正在比较邮政编码。
我有三个常用的邮政编码:
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。
有什么想法吗?
答案 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