Issue #6588 has been reported by marcandre (Marc-Andre Lafortune). ---------------------------------------- Feature #6588: Set#intersect? https://bugs.ruby-lang.org/issues/6588 Author: marcandre (Marc-Andre Lafortune) Status: Open Priority: Normal Assignee: knu (Akinori MUSHA) Category: lib Target version: 2.0.0 There is `Set#superset?`, `Set#subset?` with their `proper` variants, but there is no `Set#intersect?` nor `Set#disjoint?` To check if two sets intersect, one can do set.intersection(other).empty? This cycles through all elements, though. To be efficient, one can instead do the iteration manually: other.any? { |x| set.include?(x) } I think it would be natural to add `Set#intersect?` and its reverse `Set#disjoint?` class Set def intersect?(enum) enum.any? { |x| include?(x) } end end Maybe it would be worth it to optimize it if enum is a larger Set by starting it with return any? { |x| enum.include?(x) } if enum.is_a?(Set) && enum.size > size
on 2012-06-14 04:47
on 2012-07-14 11:39
Issue #6588 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned ---------------------------------------- Feature #6588: Set#intersect? https://bugs.ruby-lang.org/issues/6588#change-28085 Author: marcandre (Marc-Andre Lafortune) Status: Assigned Priority: Normal Assignee: knu (Akinori MUSHA) Category: lib Target version: 2.0.0 There is `Set#superset?`, `Set#subset?` with their `proper` variants, but there is no `Set#intersect?` nor `Set#disjoint?` To check if two sets intersect, one can do set.intersection(other).empty? This cycles through all elements, though. To be efficient, one can instead do the iteration manually: other.any? { |x| set.include?(x) } I think it would be natural to add `Set#intersect?` and its reverse `Set#disjoint?` class Set def intersect?(enum) enum.any? { |x| include?(x) } end end Maybe it would be worth it to optimize it if enum is a larger Set by starting it with return any? { |x| enum.include?(x) } if enum.is_a?(Set) && enum.size > size
on 2012-10-25 12:45
Issue #6588 has been updated by yhara (Yutaka HARA). Target version changed from 2.0.0 to next minor ---------------------------------------- Feature #6588: Set#intersect? https://bugs.ruby-lang.org/issues/6588#change-31537 Author: marcandre (Marc-Andre Lafortune) Status: Assigned Priority: Normal Assignee: knu (Akinori MUSHA) Category: lib Target version: next minor There is `Set#superset?`, `Set#subset?` with their `proper` variants, but there is no `Set#intersect?` nor `Set#disjoint?` To check if two sets intersect, one can do set.intersection(other).empty? This cycles through all elements, though. To be efficient, one can instead do the iteration manually: other.any? { |x| set.include?(x) } I think it would be natural to add `Set#intersect?` and its reverse `Set#disjoint?` class Set def intersect?(enum) enum.any? { |x| include?(x) } end end Maybe it would be worth it to optimize it if enum is a larger Set by starting it with return any? { |x| enum.include?(x) } if enum.is_a?(Set) && enum.size > size
on 2012-11-12 05:13
Issue #6588 has been updated by marcandre (Marc-Andre Lafortune). Comment about these simple features would be appreciated. ---------------------------------------- Feature #6588: Set#intersect? https://bugs.ruby-lang.org/issues/6588#change-32800 Author: marcandre (Marc-Andre Lafortune) Status: Assigned Priority: Normal Assignee: knu (Akinori MUSHA) Category: lib Target version: next minor There is `Set#superset?`, `Set#subset?` with their `proper` variants, but there is no `Set#intersect?` nor `Set#disjoint?` To check if two sets intersect, one can do set.intersection(other).empty? This cycles through all elements, though. To be efficient, one can instead do the iteration manually: other.any? { |x| set.include?(x) } I think it would be natural to add `Set#intersect?` and its reverse `Set#disjoint?` class Set def intersect?(enum) enum.any? { |x| include?(x) } end end Maybe it would be worth it to optimize it if enum is a larger Set by starting it with return any? { |x| enum.include?(x) } if enum.is_a?(Set) && enum.size > size
on 2012-11-12 10:09
Issue #6588 has been updated by alexeymuranov (Alexey Muranov). +1. Maybe `#meet?` instead of `#intersect?` ? It can be argued that any set intersects any other, just the intersection is sometimes empty :). ---------------------------------------- Feature #6588: Set#intersect? https://bugs.ruby-lang.org/issues/6588#change-32813 Author: marcandre (Marc-Andre Lafortune) Status: Assigned Priority: Normal Assignee: knu (Akinori MUSHA) Category: lib Target version: next minor There is `Set#superset?`, `Set#subset?` with their `proper` variants, but there is no `Set#intersect?` nor `Set#disjoint?` To check if two sets intersect, one can do set.intersection(other).empty? This cycles through all elements, though. To be efficient, one can instead do the iteration manually: other.any? { |x| set.include?(x) } I think it would be natural to add `Set#intersect?` and its reverse `Set#disjoint?` class Set def intersect?(enum) enum.any? { |x| include?(x) } end end Maybe it would be worth it to optimize it if enum is a larger Set by starting it with return any? { |x| enum.include?(x) } if enum.is_a?(Set) && enum.size > size
on 2012-11-12 16:38
Issue #6588 has been updated by marcandre (Marc-Andre Lafortune). alexeymuranov (Alexey Muranov) wrote: > +1. Thanks for the +1 > It can be argued that any set intersects any other, just the intersection is sometimes empty :). No, I believe it would be wrong to argue that. From wikipedia: "We say that A intersects B if A intersects B at some element" Moreover: "We say that A and B are disjoint if A does not intersect B. In plain language, they have no elements in common" I believe that both `intersect?` and `disjoint?` are the established terms for the concept I'm proposing. ---------------------------------------- Feature #6588: Set#intersect? https://bugs.ruby-lang.org/issues/6588#change-32818 Author: marcandre (Marc-Andre Lafortune) Status: Assigned Priority: Normal Assignee: knu (Akinori MUSHA) Category: lib Target version: next minor There is `Set#superset?`, `Set#subset?` with their `proper` variants, but there is no `Set#intersect?` nor `Set#disjoint?` To check if two sets intersect, one can do set.intersection(other).empty? This cycles through all elements, though. To be efficient, one can instead do the iteration manually: other.any? { |x| set.include?(x) } I think it would be natural to add `Set#intersect?` and its reverse `Set#disjoint?` class Set def intersect?(enum) enum.any? { |x| include?(x) } end end Maybe it would be worth it to optimize it if enum is a larger Set by starting it with return any? { |x| enum.include?(x) } if enum.is_a?(Set) && enum.size > size
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.