Add intersections and unions to Set

Claude Pache claude.pache at gmail.com
Mon Mar 4 15:00:43 PST 2013



Le 4 mars 2013 à 23:37, Claude Pache <claude.pache at gmail.com> a écrit :

> The Set constructor accepts an iterable (including an Array and a Set) as an argument to populate the newly-constructed Set with several values. There should also be the possibility to add or remove multiple elements of an already-constructed Set. That covers unions and differences, but it is more generic. I would propose:
> 
> * Set.prototype.addMultiple(iterable): adds several elements
> * Set.prototype.deleteMultiple(iterable): removes several elements
> * Set.prototype.restrict(iterable): removes the elements that are not enumerated by the iterable.

Better than 'restrict': a 'filter' method (as proposed by Tab Atkins Jr. below) similar to the one we have on Arrays. For the intersection of two Sets, we can write:

    mySet1.filter(x => mySet2.has(x))

This pattern has the advantage to be readily applicable to Maps and other collections with a clear semantic.

—Claude

> 
> (Naturally, the two first functions are also valuable for Maps.) For example, in order to obtain the difference of mySet1 and mySet2 as a new Set, you could write:
> 
>    (new Set(mySet1)).deleteMultiple(mySet2) // copies the elements of mySet1 in a new Set, then removes the elements of mySet2.
> 
> Another potentially useful generalisation is to accept multiple iterables instead of one. For example:
> 
> * new Set(iterable, iterable, ...)
> 
> (ditto for the 'addMultiple', 'deleteMultiple' and 'restrict' methods), so that we could write
> 
>    new Set(mySet1, mySet2, mySet3)
> 
> in order to create a new Set which is the union of mySet1, mySet2, and mySet3.
> 
> —Claude
> 
> Le 4 mars 2013 à 19:56, "Tab Atkins Jr." <jackalmage at gmail.com> a écrit :
> 
>> On Mon, Mar 4, 2013 at 10:08 AM,  <aleth at instantbird.org> wrote:
>>> It would be useful to be able to form the intersection and the union of
>>> two Sets. These are natural operations that are currently not part of
>>> the API
>>> (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets).
>>> 
>>> Similar methods would make sense for Map, but one would have to think
>>> about what to do in the case where the key but not the value matches.
>>> 
>>> An intersection is equivalent to a particular filter, so an alternative
>>> might be to add a method like Array.filter to Sets instead.
>>> 
>>> (I filed bug 847355 for this and was told this mailing list was the
>>> right place for this suggestion.)
>> 
>> Yes please, and also minus (remove from set A all elements it shares
>> with set B).  All three of these are fairly vital for a lot of code
>> using sets.
>> 
>> ~TJ
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss


More information about the es-discuss mailing list