passing predicates to lowerBound, or alternatively, how lazy is map?

Andrew Brown via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 11 06:26:38 PDT 2014


On Wednesday, 11 June 2014 at 13:25:03 UTC, John Colvin wrote:
> On Wednesday, 11 June 2014 at 13:20:37 UTC, Andrew Brown wrote:
>>>
>>> You are correct. assumeSorted and lowerBound will provide 
>>> better time complexity than countUntil
>>
>> I'm sorry, one final question because I think I'm close to 
>> understanding. Map produces a forward range (lazily) but not a 
>> random access range? Therefore, lowerBound will move along 
>> this range until the pred is not true? This means it would be 
>> better to do:
>>
>> numbers.indexed(order).assumeSorted.lowerBound
>>
>> than:
>>
>> map(a => numbers[a])(order).assumeSorted.lowerBound
>>
>> as the lowerBound will be faster on a random access range as 
>> produced by indexed?
>
> map preserves the random access capabilities of it's source. An 
> array is random access, therefore map applied to an array is 
> also random access.
>
> There isn't any practical difference between indices.map!((i) 
> => src[i])() and src.indexed(indices) that I know of.

That's great, thank you very much for taking the time to answer.


More information about the Digitalmars-d-learn mailing list