Как сравнить содержимое двух массивов?
Я сравниваю почтовые индексы.
У меня есть три константы почтовых индексов:
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-группу.
Любые идеи?
Ответы
Ответ 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 и работает для меня очень хорошо.