Подтвердить что ты не робот

Как сравнить содержимое двух массивов?

Я сравниваю почтовые индексы.

У меня есть три константы почтовых индексов:

ZIP_MORRIS
ZIP_UNION
ZIP_ESSEX

Я хочу посмотреть, есть ли у пользователя массив объектов, все zip файлы включены в один из них.

Я пробовал это:

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

Но, к сожалению, это просто отображает все почтовые индексы, поэтому, если бы я должен был выбрать один дополнительный почтовый индекс в другом графстве, тогда он не будет правильно сравнивать их.

Я думаю, что лучшим решением было бы сравнить значения созданных пользователем Zips и посмотреть, присутствует ли все zip файлы в одном ZIP_COUNTY внутри массива.

Какой-то итератор, который пропустил бы все почтовые индексы и обеспечил бы, чтобы пользовательский почтовый индекс делал или не включал все отдельные почтовые индексы в zip-группу.

Любые идеи?

4b9b3361

Ответ 1

Вы можете делать разности массивов, если результатом является пустой массив, 2 массива содержат одни и те же элементы:

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

Если у вас все еще есть элементы, то не все элементы первого массива присутствуют во втором:

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

Ответ 2

Ниже я использую все? оператор в массиве, который вернет 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

Вы просто изменили бы его на пользовательские почтовые индексы

Ответ 3

> [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 и работает для меня очень хорошо.