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