Difference between toLower() and asLowerCase() for strings?

Adam D. Ruppe via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jan 24 13:04:46 PST 2016


On Sunday, 24 January 2016 at 20:56:20 UTC, Jon D wrote:
> I'm trying to identify the preferred ways to lower case a 
> string. In std.uni there are two functions that return the 
> lower case form of a string: toLower() and asLowerCase(). There 
> is also toLowerInPlace().

toLower will allocate a new string, leaving the original 
untouched.

toLowerInPlace will modify the existing string.

asLowerCase will returned the modified data as you iterate over 
it, but will not actually allocate the new string.


toLower is convenient if you need to store a copy of the string 
somewhere or pass it to a function that expects an existing 
string, but allocating the new one means it is the slowest of the 
three.

toLowerInPlace is only usable if your buffer is writable, which 
many strings aren't, and might still allocate once. It is a 
middle ground for use in a relatively rare case, but if you are 
building a string and need to store it somewhere, this is a 
decent choice.

asLowerCase is the only one that will never actually build a new 
string, and thus typically gives best performance, but at the 
cost of a little bit of lesser convenience. If you are just going 
to loop over it though (including passing it to further 
transforming algorithms), use this! Or if you want to manage the 
allocation of the new string yourself, you can use this too.




As a general rule, the asLowerCase (etc.) version should be your 
first go since it is the most efficient. But the others are 
around for convenience in cases where you need a new string built 
anyway.



More information about the Digitalmars-d-learn mailing list