Arrays 从对象数组中删除对象
我的问题应该很简单,但我不明白 例如,我从数据库中获得以下数据:Arrays 从对象数组中删除对象,arrays,ruby-on-rails-3,Arrays,Ruby On Rails 3,我的问题应该很简单,但我不明白 例如,我从数据库中获得以下数据: @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
@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
@user.delete(u)方法从数据库中删除用户,但我只想从数组@user中删除对象u。你可以这样做,反之亦然
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
result\u用户=[]
@其他用户。每个用户都可以|
@user.each do|u|
如果o[“电子邮件”]!=u[“用户邮件”]
结果用户您可以使用:
@other_user.each do |o|
@user.delete_if{|u| u["email"] == o["email"]}
end
它更简单,没有删除数据库,只在数组中删除。=) 走便宜一点的路怎么样。。。减少工作量。。
创建一个你们知道的、不再需要的电子邮件地址数组
other_emails = @other_user.map{|o| sanitize(o["email"]) }
@users = User.where("email not in ( #{other_emails.join(',')} )")
这种方法有很多优点
只有一个循环(地图),没有嵌入任何内容李>
只有一个数组可以调整大小(贴图)。我们不调用delete,这是对数组的一项繁重操作
我们只通过网络获取我们关心的记录。当你只关心一小部分的时候,却要毁掉一百万张唱片是愚蠢的。尽量只从数据库中读取您需要的内容李>
有时候,让数据库做事情更明智 我想你不需要使用@user.email,只要:
@users.delete_if {|user| @other_user.include? user}
@用户不是数组。。这当然是一个集合,但也是一个activerecord集合。您可以遍历它,然后做一堆感觉像数组的事情。不要把它看作一个数组。这会让你心碎的。