Sets / associative arrays with void values?
Chris Nicholson-Sauls
ibisbasenji at gmail.com
Sun Jan 7 13:55:03 PST 2007
Georg Wrede wrote:
> Carlos Santander wrote:
>> Chris Nicholson-Sauls escribió:
>>
>>> Jeff M wrote:
>>>
>>>> On 2007-01-06 16:05:06 -0800, "Vladimir Panteleev"
>>>> <tehcybershadow at 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
>>>>
>>>
>>> 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-Sauls
>>
>>
>> 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?
>
> Or defined as a declaration of a set.
>
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-Sauls
More information about the Digitalmars-d
mailing list