Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #23569

Re: class needs to initialize vars, set data structure

Path csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!ecngs!feeder2.ecngs.de!217.188.199.168.MISMATCH!takemy.news.telefonica.de!telefonica.de!newsfeed.arcor.de!newsspool3.arcor-online.net!news.arcor.de.POSTED!not-for-mail
Content-Type text/plain; charset="UTF-8"
Message-ID <2749015.oGmWMc4bhc@PointedEars.de> (permalink)
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Reply-To Thomas 'PointedEars' Lahn <cljs@PointedEars.de>
Organization PointedEars Software (PES)
Date Wed, 12 Mar 2014 15:09:24 +0100
User-Agent KNode/4.11.5
Content-Transfer-Encoding 8Bit
X-Face %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&.<b';Md8`dH6iqhT)6C^.Px|[=M@7=Ik[_w<%n1Up"LPQNu2m8|L!/3iby{-]A+#YE}Kl{Cw$\U!kD%K}\2jz"QQP6Uqr],./"?;=4v
Face iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEXTxa4RFk5dUWANED8PFEfy7+MGBiW+n3ZNF/QuAAACaElEQVQ4jVXUwVOcMBQG8Dc7Rc4PUntdWV2uxjDpGaGeozOp1woar4jd5t/v9wLstMwsA/ntlxdCAgUc1hjTc9/JCZfGoo3wG3HdmdAWrIJRHe7GM/TmpY5VFefuVcAkkPbLIaN8rmPmjloyZxgyR3GuJ4K0AGtJ2htz8o7yqikm759fldQXaMpbDzjKAG+8v+AugVTOPO5DOjLvGtUYQwh0CPjnVMyGd+8/GfUB5nLKJDD2aLDh5HYyMDJGDwQIo2ZmZcKbowNmAdB/AzyFhrmF2MHRb0QJJfaAnwGB6orZhoykLzJtGwF/xpYxI1dswomiUj3gTuAIqCn/4C7cULwGNBtwMTk3Y4LfKB5YUaOKBKYtpplm7u0vip8tU1NWWyI/7XdcSuIDoMt6rVHMWT0DbjHPGqDqZVSa6zleLcUTcIKLoMv3ueJluALtAo9B302zPPlrtiVScRdCjXvVh3e3JpYa/jjkuC9N+LrBMlz/eAN4eQijX2EdLo6c5tGGHwLyHFtXk89dDGHwCVhG9T0S/j55AhRZgkMCmUQXJ49TnS1wnQDvw0eAh9ICeMmEFbCnPMFzjAvsWoEWEFdYEx+S0MoUZ1gT1wId8+AF3Bl2OoEu906AUHx5VLw/gXYg/x84loOah/2UYNrgiwSwGO7RfUzVBbx/kgpckumGOi6QirtD6gkLTitbnxNol47S2jVc2vsN5kPqaAHT8uUdAJM4v/DanjYOwmUjWznGfwB7sGtAtor5BgofDuzaRj4kSQAqDakTsKORa3Q3xKi3gE1fhl71KRMqrdZ2AWNNg/YOhQyrVBnb+i+nEg4bsDA+egAAAABJRU5ErkJggg==
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>
MIME-Version 1.0
Lines 55
NNTP-Posting-Date 12 Mar 2014 15:09:29 CET
NNTP-Posting-Host ad526190.newsspool2.arcor-online.net
X-Trace DXC=5:ei<`0^1HBA<A_d>@P]\DA9EHlD;3YcB4Fo<]lROoRA8kF<OcfhCOKR[I1g;IgMYBDZm8W4\YJNLYUVHKH;GI^GMcGK=YF^0ACNFFGNlCLMQH
X-Complaints-To usenet-abuse@arcor.de
Xref csiph.com comp.lang.javascript:23569

Show key headers only | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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