如何创建一个从Ruby中的另一个数组中排除项目的数组

时间:2011-09-27 03:26:14

标签: ruby arrays

我有两个数组,每个数组都包含不同的属性。

participants

guests

唯一的共同点是provider_user_id

我想做这样的事情

all_people = participants.map {|p| p.provider_user_id <> guests.provider_user_id }

这可能不正确。

如何消除那些同样位于来宾阵列中的参与者?

3 个答案:

答案 0 :(得分:1)

以下是有效的,但如果有更简洁的话,我会感兴趣。

guest_provider_ids = guest.map(&:provider_id)
non_guest_participants = participants.reject do |participant|
  guest_provider_ids.include?(participant.provider_user_id)
end

答案 1 :(得分:1)

可以工作......

guests.each { |g| participants << g }
guests.uniq! { |g| g.provider_user_id }

这(应该)首先组合两个数组,然后根据键删除任何重复数据。

答案 2 :(得分:1)

好的答案,但不要忘记|。对于1.9

p (guests | participants).uniq!{|g| g.provider_user_id}

1.8

p (guests | participants).reject{|p| guests.map{|g| g.provider_user_id}.include?(p.provider_user_id)}