Associative Ranges
Freddy via Digitalmars-d
digitalmars-d at puremagic.com
Mon Aug 4 19:34:42 PDT 2014
On Tuesday, 5 August 2014 at 00:11:21 UTC, Freddy wrote:
> On Monday, 4 August 2014 at 09:21:40 UTC, Marc Schütz wrote:
>> On Sunday, 3 August 2014 at 18:38:51 UTC, Freddy wrote:
>>> On Sunday, 3 August 2014 at 08:50:47 UTC, Marc Schütz wrote:
>>>> 3) For the value and key ranges, there should be a guarantee
>>>> that they can be zipped through, i.e. that the elements in
>>>> them are in the same order so keys and values correspond to
>>>> each other. The built-in associative arrays provide `byKey`
>>>> and `byValue`, which satisfy this condition.
>>> Also won't the implicit range make it hard to implement
>>> function
>>> like map (should you map to whole range or to the value)
>>
>> I guess when you iterate over it, you just get tuples. So,
>> `map` would return a normal range of tuples, not an
>> associative range. There could then be a method to convert
>> such a range to an associative range (although it would need
>> to assume that the first tuple elements = keys are unique).
>>
>> I'm not sure whether this is the right thing to do. In any
>> case I don't think it's good to map the keys, because they
>> mustn't be modified, or otherwise you could get duplicate keys.
>>
>> An alternative would be that `map` takes both a the key and
>> the value, but returns only the new value. The same goes for
>> the other range operations (e.g. reduce). But on the other
>> hand, this doesn't seem to scale, because all range algorithms
>> would then have to be specialized for associative ranges...
> The way I have it now is that type doesn't matter when you
> iterate over a assciative range, all that matters is that that
> type has a .key and .value. This allow custom opAssign and
> other
> bonuses.
>
> Should I switch to use type tuples.
>
> A lot of the functions that take Input/Forward ranges don't need
> specialization because you could use byValue and zip with
> byKey(however then we might need to add a default .key and
> .value
> to type tuples if we go with my original idea).
Wait, the build-in associative arrays already a opApply with a
single element, this makes them unable to be an associate range
(depending on priority we would break backwards compatabily or be
unable to use them as a range) unless we change the associtive
range interface to be an input/forward range of the value type
and ask users to zip byKeys and the range
More information about the Digitalmars-d
mailing list