如果项目符合条件,我正试图获得两个集合之间的交集。
到目前为止,这是我的代码:
facebook_friends.select {|friend| @liked_by.select {|liked| liked.id == friend["id"]}}
facebook_friends
是包含用户的Facebook好友信息的哈希。
@liked_by
是一群喜欢电影的Struct.new("Friend", :facebook_id, :id)
用户。
我正在努力让那些也喜欢这部电影的Facebook好友,但那句话给了我所有的Facebook好友,或者有时候只有相同的参数才是空的。我做错了什么?
答案 0 :(得分:1)
Array#select
返回块返回true的数组中所有元素的列表;如果没有,那么它返回一个空数组。你的实现的问题是你的外部块总是评估为true,因为即使一个空数组也算作" true" Ruby中的价值。所以你要做的就是改变你的内部块,如果匹配实际存在,只返回true
;使用例如any?
代替select
将会这样做:
facebook_friends.select {|friend| @liked_by.any? {|liked| liked.id == friend["id"]}}