如何判断 ruby 两个数组中,是否有相同元素,求方法
#当前用户的GROUP
current_user_groups = User.find(User.current.id).groups.collect(&:lastname)
# 被指派用户的GROUP
assigned_user_groups = User.find(assigned_to_id).groups.collect(&:lastname)
#设置默认为同组
diff_group = false
#判断指派人与被指派人是否同组
current_user_groups.each do |k|
assigned_user_groups.each do |e|
if k != e && e!= "TEST"
logger.info"#{k}"
diff_group = true
logger.info"#{e}"
end
end
end
Group.where(user_id: User.current.id).where(id: Group.where(user_id: assigned_to_id).select(:id)).exists?
SQL 查速度相对会很快,不知道你表是怎样设计的 大概就是这意思
# 当前用户的GROUP
current_user_groups = ['ADMIN', 'USER']
# 被指派用户的GROUP
assigned_user_groups = ['USER', 'TEST', 'ADMIN']
=> true
起码应该这样:
# 判断指派人与被指派人是否同组 def diff_group(a, b) diff = false # 设置默认为同组 a.each do |k| b.each do |e| puts "#{k} <=> #{e}" diff = (k != e && e!= "TEST") end end diff end
如果是俺理解错了,那也该这样:
# 判断指派人与被指派人是否同组 def diff_group(a, b) a.each do |k| b.each do |e| if k != e && e!= "TEST" puts "#{k} <=> #{e}" return true end end end false # 设置默认为同组 end
同组测试:
[1] pry(main)> # 当前用户的GROUP
[2] pry(main)> current_user_groups = ['ADMIN', 'USER']
=> ["ADMIN", "USER"]
[3] pry(main)> # 被指派用户的GROUP
[4] pry(main)> assigned_user_groups = ['USER', 'TEST', 'GUEST']
=> ["USER", "TEST", "GUEST"]
[5] pry(main)> diff_group(current_user_groups, assigned_user_groups)
=> false
异组测试:
[1] pry(main)> # 当前用户的GROUP
[2] pry(main)> current_user_groups = ['ADMIN', 'USER', 'TEST']
=> ["ADMIN", "USER", "TEST"]
[3] pry(main)> # 被指派用户的GROUP
[4] pry(main)> assigned_user_groups = ['TEST', 'GUEST']
=> ["TEST", "GUEST"]
[5] pry(main)> diff_group(current_user_groups, assigned_user_groups)
=> true
a = [1,2]
b = [2,3]
(a - b).length != a.length
习惯用少的那个去减,true 表示有交集,false 表示没有