Ruby 2.1: Les nouvelles méthodes de Set
Avec la sortie de Ruby 2.1, la bibliothèque standard Set s’enrichie de
deux méthodes supplémentaires: disjoint? et intersect?.
Set permet de créer un ensemble d’éléments uniques:
>> require 'set'
>> Set.new [1, 2, 1, 2, 2]
=> #<Set: {1, 2}>La nouvelle méthode intersect? permet de tester si deux sets ont au moins
un élément en commun:
>> s1 = Set.new [1, 2, 3]
>> s2 = Set.new [4, 5, 6]
>> s3 = Set.new [1, 8, 9]
>> s1.intersect? s2
=> false
>> s1.intersect? s3
=> trueLa seconde méthode, disjoint?, est son opposée. Elle teste si deux sets n’ont
aucuns éléments communs:
>> s1.disjoint? s2
=> true
>> s1.disjoint? s3
=> falseCe genre de méthode n’est pas très compliqué à coder soi-même, comme le
montre le code source de intersect?:
def intersect?(set)
set.is_a?(Set) or raise ArgumentError, "value must be a set"
if size < set.size
any? { |o| set.include?(o) }
else
set.any? { |o| include?(o) }
end
endMais l’avoir en standard permet de ne pas réinventer la roue…
Quant au code source de disjoint?, c’est très exactement comme je
le disais plus haut, l’opposé de intersect?:
def disjoint?(set)
!intersect?(set)
endÀ demain.
/ / / / / / / / / /