Как получить только уникальные результаты из двух разных массивов? - PullRequest
0 голосов
/ 07 апреля 2011

Это может показаться дублирующим вопросом, но я не могу найти никакой информации по этому вопросу.Я хочу показать результаты из удаленно полученного массива json, исключая определенные результаты, сравнивая их с локальной таблицей.У меня есть модель галереи с:

t.integer :smugmug_id
t.string :smugmug_key
t.integer :category_id
t.string :category_name
t.string :description
t.integer :highlight_id
t.string :highlight_key
t.string :highlight_type
t.string :keywords
t.string :nicename
t.integer :subcategory_id
t.string :subcategory_name
t.string :title
t.string :url

Данные для этой модели заполняются граблями, которые подключаются к smugmug api (json) и хранят данные локально.Я пытаюсь создать представление, которое показывает все галереи самодовольных, которые не хранятся локально.

Вот то, что я пробовал до сих пор, но это не исключает локально хранящиеся галереи, как я и думал.

def self.not_stored
  smugmug_list = Smug::Client.new.albums(heavy = true)
  gallery_list = Gallery.select(:smugmug_id)
  smugmug_list.each do |smugmug|
    smugmug unless gallery_list.include? smugmug.id
  end
end

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

Быстрое редактирование: я использую адаптацию этот драгоценный камень для подключения к API контрабанды.

1 Ответ

3 голосов
/ 07 апреля 2011

Просто используйте оператор разности .

Общий пример:

ruby-1.9.2-p136 :001 > [3,2,1] - [2,1]
 => [3] 

Итак, вы бы получили:

smugmug_list.collect{|e| e.id} - gallery_list

Enumerable # collect превратит smugmug_list в список идентификаторов. Оттуда вы можете сделать оператор разницы, который будет возвращать все идентификаторы всех галерей самодовольных, которые не хранятся локально.

Еще один вариант ведения списка галерей:

smugmug_list.select{|e|!gallery_list.include?(e.id)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...