2015-03-30 3 views
0

Почувствуйте, что название подвело его довольно хорошо. У меня два больших массива, все из которых содержат идентификаторы.Проверьте значения между двумя массивами

Один из них - old_list, а другой - текущий_лист. То, что я хотел бы сделать это:

  • удалить все значения в old_list, которые не присутствуют в current_list
  • , если значение в current_list присутствует в old_list ничего
  • не делать
  • , если значение в current_list новое, то создать его и добавить его в old_list

Это устанавливается в качестве фонового задания, которое обновляет каждые 4 часа. Таким образом, я хочу увидеть, появилось ли какое-либо новое значение или удалено с момента последнего проверки.

Вот что я в настоящее время, который не является полным:

twitter.follower_ids("#{uid}").each do |f_id| 
     # unless user already has follower id saved 
     unless followers.map(&:follower_id).include?(f_id.to_s) 
     followers.create do |follower| 
      follower.follower_id = f_id 
     end 
     end 
    end 

ответ

3

Вам нужно сделать ниже Set операции:

(old_list & current_list) | current_list 

Пример:

old_v = [1,2,43] 
new_v = [1,11,21] 
(old_v & new_v) | new_v # => [1, 11, 21] 

Array#& и Array#|.

+0

Не могли бы вы подробнее рассказать, не знаю, понял ли я это? – sja

+0

Ницца. Не знал об этом, как бы я мог реализовать это в моем примере, хотя у меня есть некоторые сбережения и т. Д.? – sja

+0

@sja Просто вызовите метод '# each' like' ((old_list & current_list) | current_list) .each {| item | ваш код здесь} ' –

Смежные вопросы