digitalmars.D - Sets / associative arrays with void values?
- Vladimir Panteleev (17/17) Jan 06 2007 I've been wondering whether D supported sets, or something similar. What...
- Jeff M (6/24) Jan 06 2007 It would be nice if a "void[int]" array was usable. Associative arrays
- Chris Nicholson-Sauls (5/33) Jan 06 2007 Actually I'm pretty sure create-on-access was removed several releases b...
- Carlos Santander (7/43) Jan 07 2007 That's true.
- Georg Wrede (2/49) Jan 07 2007 Or defined as a declaration of a set.
- Chris Nicholson-Sauls (4/56) Jan 07 2007 That would suit me just fine. It would need a usable syntax though... p...
-
Stewart Gordon
(7/12)
Jan 07 2007
I've been wondering whether D supported sets, or something similar. What I have in mind isn't unlike associative arrays, but without values: an unordered list with quick look-up and simple addition/removal of elements, yet still capable of enumeration, etc. I followed my intuition and tried to declare an associative array with a "void" value type: void[int] foo; To my surprise, it compiled. And even the "in" operation and the .keys and .values properties worked fine (or as fine as they can work with an empty associative array). Of course, the question comes: how would one add keys to such a construct? The practical answer is obvious: use a real "dummy" data type (bit, for example) as the value type, but I find it a shame that declaring such constructs is allowed - yet you can't really use them. -- Using Opera's revolutionary e-mail client: http://www.opera.com/mail/ Fix obvious typo in e-mail address to reply.
Jan 06 2007
On 2007-01-06 16:05:06 -0800, "Vladimir Panteleev" <tehcybershadow gmail.com> said:I've been wondering whether D supported sets, or something similar. What I have in mind isn't unlike associative arrays, but without values: an unordered list with quick look-up and simple addition/removal of elements, yet still capable of enumeration, etc. I followed my intuition and tried to declare an associative array with a "void" value type: void[int] foo; To my surprise, it compiled. And even the "in" operation and the .keys and .values properties worked fine (or as fine as they can work with an empty associative array). Of course, the question comes: how would one add keys to such a construct? The practical answer is obvious: use a real "dummy" data type (bit, for example) as the value type, but I find it a shame that declaring such constructs is allowed - yet you can't really use them.It would be nice if a "void[int]" array was usable. Associative arrays are create-on-access, so "foo[5];" should be a legal for creating an index in the array, but this throws an error. -- Jeff
Jan 06 2007
Jeff M wrote:On 2007-01-06 16:05:06 -0800, "Vladimir Panteleev" <tehcybershadow gmail.com> said:Actually I'm pretty sure create-on-access was removed several releases back? And I also thought the compiler no longer allowed a void value type for associative arrays, but I guess I was wrong on that one. -- Chris Nicholson-SaulsI've been wondering whether D supported sets, or something similar. What I have in mind isn't unlike associative arrays, but without values: an unordered list with quick look-up and simple addition/removal of elements, yet still capable of enumeration, etc. I followed my intuition and tried to declare an associative array with a "void" value type: void[int] foo; To my surprise, it compiled. And even the "in" operation and the .keys and .values properties worked fine (or as fine as they can work with an empty associative array). Of course, the question comes: how would one add keys to such a construct? The practical answer is obvious: use a real "dummy" data type (bit, for example) as the value type, but I find it a shame that declaring such constructs is allowed - yet you can't really use them.It would be nice if a "void[int]" array was usable. Associative arrays are create-on-access, so "foo[5];" should be a legal for creating an index in the array, but this throws an error. -- Jeff
Jan 06 2007
Chris Nicholson-Sauls escribió:Jeff M wrote:That's true. Back then, I used "void[T]" as a set, but since the change, I use "T[T]". BTW, since "void[T]" is mostly useless (for the reasons stated above), would it be reasonable for the compiler to flag such a declaration as an error? -- Carlos Santander BernalOn 2007-01-06 16:05:06 -0800, "Vladimir Panteleev" <tehcybershadow gmail.com> said:Actually I'm pretty sure create-on-access was removed several releases back? And I also thought the compiler no longer allowed a void value type for associative arrays, but I guess I was wrong on that one. -- Chris Nicholson-SaulsI've been wondering whether D supported sets, or something similar. What I have in mind isn't unlike associative arrays, but without values: an unordered list with quick look-up and simple addition/removal of elements, yet still capable of enumeration, etc. I followed my intuition and tried to declare an associative array with a "void" value type: void[int] foo; To my surprise, it compiled. And even the "in" operation and the .keys and .values properties worked fine (or as fine as they can work with an empty associative array). Of course, the question comes: how would one add keys to such a construct? The practical answer is obvious: use a real "dummy" data type (bit, for example) as the value type, but I find it a shame that declaring such constructs is allowed - yet you can't really use them.It would be nice if a "void[int]" array was usable. Associative arrays are create-on-access, so "foo[5];" should be a legal for creating an index in the array, but this throws an error. -- Jeff
Jan 07 2007
Carlos Santander wrote:Chris Nicholson-Sauls escribió:Or defined as a declaration of a set.Jeff M wrote:That's true. Back then, I used "void[T]" as a set, but since the change, I use "T[T]". BTW, since "void[T]" is mostly useless (for the reasons stated above), would it be reasonable for the compiler to flag such a declaration as an error?On 2007-01-06 16:05:06 -0800, "Vladimir Panteleev" <tehcybershadow gmail.com> said:Actually I'm pretty sure create-on-access was removed several releases back? And I also thought the compiler no longer allowed a void value type for associative arrays, but I guess I was wrong on that one. -- Chris Nicholson-SaulsI've been wondering whether D supported sets, or something similar. What I have in mind isn't unlike associative arrays, but without values: an unordered list with quick look-up and simple addition/removal of elements, yet still capable of enumeration, etc. I followed my intuition and tried to declare an associative array with a "void" value type: void[int] foo; To my surprise, it compiled. And even the "in" operation and the .keys and .values properties worked fine (or as fine as they can work with an empty associative array). Of course, the question comes: how would one add keys to such a construct? The practical answer is obvious: use a real "dummy" data type (bit, for example) as the value type, but I find it a shame that declaring such constructs is allowed - yet you can't really use them.It would be nice if a "void[int]" array was usable. Associative arrays are create-on-access, so "foo[5];" should be a legal for creating an index in the array, but this throws an error. -- Jeff
Jan 07 2007
Georg Wrede wrote:Carlos Santander wrote:That would suit me just fine. It would need a usable syntax though... perhaps as simple as adding a .add property counter to the existing .remove? -- Chris Nicholson-SaulsChris Nicholson-Sauls escribió:Or defined as a declaration of a set.Jeff M wrote:That's true. Back then, I used "void[T]" as a set, but since the change, I use "T[T]". BTW, since "void[T]" is mostly useless (for the reasons stated above), would it be reasonable for the compiler to flag such a declaration as an error?On 2007-01-06 16:05:06 -0800, "Vladimir Panteleev" <tehcybershadow gmail.com> said:Actually I'm pretty sure create-on-access was removed several releases back? And I also thought the compiler no longer allowed a void value type for associative arrays, but I guess I was wrong on that one. -- Chris Nicholson-SaulsI've been wondering whether D supported sets, or something similar. What I have in mind isn't unlike associative arrays, but without values: an unordered list with quick look-up and simple addition/removal of elements, yet still capable of enumeration, etc. I followed my intuition and tried to declare an associative array with a "void" value type: void[int] foo; To my surprise, it compiled. And even the "in" operation and the .keys and .values properties worked fine (or as fine as they can work with an empty associative array). Of course, the question comes: how would one add keys to such a construct? The practical answer is obvious: use a real "dummy" data type (bit, for example) as the value type, but I find it a shame that declaring such constructs is allowed - yet you can't really use them.It would be nice if a "void[int]" array was usable. Associative arrays are create-on-access, so "foo[5];" should be a legal for creating an index in the array, but this throws an error. -- Jeff
Jan 07 2007
Vladimir Panteleev wrote: <snip>void[int] foo;<snip>Of course, the question comes: how would one add keys to such a construct? The practical answer is obvious: use a real "dummy" data type (bit, for example) as the value type, but I find it a shame that declaring such constructs is allowed - yet you can't really use them.Strange indeed. Sounds like a bug. But do have a look at hashset in my utility library: http://pr.stewartsplace.org.uk/d/sutil/ Stewart.
Jan 07 2007