improving the join function
Daniel Gibson
metalcaedes at gmail.com
Mon Oct 11 21:00:44 PDT 2010
Andrei Alexandrescu schrieb:
> On 10/11/2010 10:34 PM, Daniel Gibson wrote:
>> Andrei Alexandrescu schrieb:
>>> On 10/11/2010 08:57 PM, Daniel Gibson wrote:
>>>> But right now the point is: join() does something completely different
>>>> and should be renamed (or deprecated in std.string and replaced by
>>>> union() - a real join isn't needed in std.string anyway, but when
>>>> join()
>>>> is deprecated in std.string you can implement a real join in
>>>> std.algorithm without causing too much confusion).
>>>
>>> I think union() is a worse name than join(). The discussion was to
>>> generalize within reason std.string.join, which is present under that
>>> name and with that functionality in many other languages and libraries.
>>>
>>> Andrei
>>
>> Okay, union does kind of suck, because it implies set semantics (and
>> thus no ordering).
>>
>> What about concat()?
>> It seems like join() is expected to work this way for strings.. but as a
>> generic algorithm working on kind-of-cursors?
>
> I for one would expect join() in its relational sense to work on things
> quite a bit more structured than just ranges (there's need for indexes
> etc). Therefore, if relational join() will be introduced later,
> overloading will disambiguate it. There's no reason to worry.
>
> Andrei
Of course indexes would speed things up, but as mentioned before join() would work ok on almost(*)
all ranges (with O(n^2) complexity) and a lot better on std.range.SortedRange.
Because the user would provide a predicate (that should use the same comparator that was used to
sort the range) no additional structure (metadata like needed for natural join) would be needed.
(*) the inner range needs to be a FordwardRange so it can be traversed multiple times
More information about the Digitalmars-d
mailing list