Why D is annoying =P
H. S. Teoh
hsteoh at quickfur.ath.cx
Wed Oct 24 13:49:32 PDT 2012
On Wed, Oct 24, 2012 at 10:38:07PM +0200, Mehrdad wrote:
> On Wednesday, 24 October 2012 at 20:37:08 UTC, H. S. Teoh wrote:
> >On Wed, Oct 24, 2012 at 10:16:27PM +0200, Mehrdad wrote:
> >[...]
> >>struct Set(T)
> >>{
> >> int[T] dict;
> >> hash_t toHash() const
> >> {
> >> typeof(return) r = 0;
> >> foreach (item; this.dict.keys)
> >> {
> >> ??? // what should be here?
> >> }
> >> return r;
> >> }
> >>}
> >
> >Try this:
> >
> > hash_t toHash() const
> > {
> > hash_t h = 0;
> > foreach (item; this.dict.keys)
> > {
> > // We use a commutative operation here (+) so
> > // that the order of keys don't matter.
> > h += hashOf(&item, item.sizeof);
> > }
> > return h;
> > }
> >
> >
> >T
>
> Wouldn't that do a bitwise comparison?
Umm, the idea of a hash is to *quickly* compute a value that's (mostly)
unique for a given object. In most cases, the bit representation is good
enough. If you want a thorough recursive comparison of all subobjects,
you should overload opEquals and use that instead.
Or use compile-time reflection to iterate over every member of the given
object and recursively iterate and hash them. Though I fail to see the
point of it, since it defeats the purpose of a hash in the first place -
you might as well just do the usual recursive compare instead.
T
--
Never step over a puddle, always step around it. Chances are that whatever made it is still dripping.
More information about the Digitalmars-d
mailing list