gpt4 book ai didi

ruby-on-rails - 如何在 Ruby 中匹配两个具有重复项的数组?

转载 作者:数据小太阳 更新时间:2023-10-29 07:27:39 24 4
gpt4 key购买 nike

我知道这会删除重复项:

@email.distributions.map(&:zip_code) & CardSignup.all.map(&:zip_code)

但我想做同样的事情,在那里我找到任何匹配的东西,但它也向我显示重复项。

有什么想法吗?

我正在尝试查找注册了邮政编码与我设置的邮政编码首选项相匹配的卡片的人数。

最佳答案

Array#reject再次救援!喜欢Array#map ,它接受 block ,允许你做这样的事情:

zip_codes = CardSignup.all.map(&:zip_code)
@email.distributions.reject{|o| !zip_codes.include?(o.zip_code)}

哦,当然,如果您喜欢寻找更优雅的方法,请始终像您已经做的那样考虑运算符。 & 将返回一个新数组,其中包含两个对象,| 将加入并删除重复项。

ruby-1.9.2-p0 > [1,2] | [2,3]
=> [1, 2, 3]
ruby-1.9.2-p0 > [1,2] & [2,3]
=> [2]

编辑:正如 Tokland 在评论中所说,由于这是在 Rails 模型上应用的,因此您可能需要考虑将其作为选择进行。像这样 -

zip_codes = CardSignup.all.map(&:zip_code)
@email.distributions.where('zip_code IN (?)', zip_codes)

或者,使用 INNER JOIN 来实现。虽然看起来不那么漂亮。

@email.distributions.joins('INNER JOIN card_signups ON card_signups.zip_code = email_distributions.zip_code').all

(如果@email.distributions 的表是 email_distributions..)

关于ruby-on-rails - 如何在 Ruby 中匹配两个具有重复项的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5354850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com