Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #23569
| Message-ID | <2749015.oGmWMc4bhc@PointedEars.de> (permalink) |
|---|---|
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
| Organization | PointedEars Software (PES) |
| Date | 2014-03-12 15:09 +0100 |
| Subject | Re: class needs to initialize vars, set data structure |
| Newsgroups | comp.lang.javascript |
| References | <972c7156-b68b-4ff4-8d82-55f00676b1a7@googlegroups.com> <return-20140312004838@ram.dialup.fu-berlin.de> <set-20140312005707@ram.dialup.fu-berlin.de> <6465521.OizMrxDySb@PointedEars.de> |
Thomas 'PointedEars' Lahn wrote:
> Stefan Ram wrote:
>> ram@zedat.fu-berlin.de (Stefan Ram) writes:
>>> var Set = function()
> […]
>>> { var map = {};
>>> return
>>> { add : function( element ){ map[ element ]= true; },
> […]
>>> remove : function( element ){ delete map[ element ]; },
> […]
>>> contains: function( element ){ return map.hasOwnProperty( element );
> […]
>>> },
>>> count : function( element ){ return Object.keys( map ).length; }
> […]
>>> }};
> […]
> Compare <http://PointedEars.de/wsvn/JSX/trunk/map.js>.
> […]
> Also, a set is _not_ a map, and vice-versa. A set is a data structure
> that contains no duplicate *values*; a map is a data structure that
> contains no duplicate *keys*.
Reviewing this, I see that you are probably aware of that fact as the
“true” indicates that you intended your “Set” factory to work that way.
However, you are not aware of the fact that property names are, and can only
be, primitive String values in ECMAScript. Non-strings are converted to
String for property access. [1] So this works reliably only for String
values, *with the provisions that I named*.
AFAICS, a reliable *and* efficient Set implementation in ECMAScript leads to
a hash table implementation where the key is the string representation of
the value (while avoiding to overwrite built-in properties), and each entry
of the table contains no duplicates. IOW, for this a Map implementation is
required that supports non-strings as keys.
Incidentally, that is what jsx.map.Map() does, so I had used it in
jsx.python.set(), which I had completely forgotten about:
<http://PointedEars.de/wsvn/JSX/trunk/python.js>
<http://PointedEars.de/scripts/test/python>
(This code is on “trunk”, therefore largely untested and not stable;
bug reports are appreciated.)
__________
[1] <http://ecma-international.org/ecma-262/5.1/#sec-11.2.1>
--
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not Cc: me. / Bitte keine Kopien per E-Mail.
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
class needs to initialize vars, set data structure JRough <janis.rough@gmail.com> - 2014-03-11 15:36 -0700
Re: class needs to initialize vars, set data structure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-03-12 03:34 +0100
Re: class needs to initialize vars, set data structure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-03-12 15:09 +0100
Re: class needs to initialize vars, set data structure John Harris <niam@jghnorth.org.uk.invalid> - 2014-03-12 17:04 +0000
Re: class needs to initialize vars, set data structure John Harris <niam@jghnorth.org.uk.invalid> - 2014-03-14 10:48 +0000
Re: class needs to initialize vars, set data structure Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-03-12 03:17 +0000
Re: class needs to initialize vars, set data structure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-03-12 11:46 +0100
Re: class needs to initialize vars, set data structure Christoph Michael Becker <cmbecker69@arcor.de> - 2014-06-25 22:51 +0200
Re: class needs to initialize vars, set data structure Christoph Michael Becker <cmbecker69@arcor.de> - 2014-06-26 00:42 +0200
Re: class needs to initialize vars, set data structure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-26 11:16 +0200
Re: class needs to initialize vars, set data structure Christoph Michael Becker <cmbecker69@arcor.de> - 2014-06-26 21:44 +0200
Re: class needs to initialize vars, set data structure John Harris <niam@jghnorth.org.uk.invalid> - 2014-06-27 09:46 +0100
Re: class needs to initialize vars, set data structure Scott Sauyet <scott.sauyet@gmail.com> - 2014-06-28 21:57 -0700
Re: class needs to initialize vars, set data structure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-03-12 15:34 +0100
csiph-web