Удалить объект из массива объектов - PullRequest
0 голосов
/ 21 января 2012

моя проблема должна быть довольно простой, но я ее не получил.

Например, у меня есть следующие данные из базы данных:

@user = User.all

тогда у меня есть другой массивпользователя

other_user = getting_them_from_somewhere_else

Теперь я перебираю два массива и проверяю, находятся ли некоторые пользователи в базе данных, проверяя электронные письма:

@other_user.each do |o|
    @user.each do |u|
        if o["email"] == u["user_mail"]
            @user.delete(u)
            break
        end
    end

    ... do something with o ...
end

method @ user.delete (u) удаляет пользователя из базы данных, но я просто хочу удалить объект u из массива @ user.

Ответы [ 4 ]

0 голосов
/ 24 декабря 2017

Я думаю, вам не нужно использовать @ user.email, просто:

  @users.delete_if {|user| @other_user.include? user}
0 голосов
/ 28 марта 2013

Вы можете использовать:

@other_user.each do |o|
   @user.delete_if{|u| u["email"] == o["email"]}
end

Это более просто и не удаляет базу данных, только удаляет в массиве.=)

0 голосов
/ 30 июля 2013

Как насчет того, чтобы пойти по более дешевому пути ... Меньше работы .. создайте массив адресов электронной почты, о которых вы знаете, и больше не хотите.

other_emails = @other_user.map{|o| sanitize(o["email"]) }
@users = User.where("email not in (  #{other_emails.join(',')}  )")

У этого подхода очень много плюсов.

  1. есть только один цикл (карта), ничего не встроено.
  2. есть только один размер массива (карта). Мы не вызываем delete, которая является тяжелой операцией для массива.
  3. Мы получаем записи только по той сети, которая нам небезразлична. Сносить 1 миллион записей, когда вы заботитесь только о нескольких, глупо. Стремитесь читать только из БД, что вам нужно.

Иногда позволить базе данных делать что-то умнее.

0 голосов
/ 21 января 2012

Вы можете сделать наоборот

result_users = []
@other_user.each do |o|
    @user.each do |u|
        if o["email"] != u["user_mail"]
            result_users << u
        end
    end

    ... do something with o ...
end
here you should use result_users array which has the users you need
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...