Thread overview
How to use UFCS and std.algorithm.sort?
Mar 10, 2015
Andre
Mar 10, 2015
Tobias Pankrath
Mar 10, 2015
Jonathan M Davis
Mar 10, 2015
Andre
Mar 10, 2015
Ali Çehreli
March 10, 2015
Hi,

with the new beta I get the warning I should use std.algorithm.sort instead the .sort property. I thought the std.algorithm.sort method is used in this example?

void main()
{	
	import std.algorithm: sort, uniq, map;
	import std.array: array;
	
	string[] arr = ["A","B","B","C"];

	string[] result = arr
		.map!(n => n) // minified
		.array
		.sort
		.uniq
		.array;
}

I want to use the sort template with the default less "a < b" without specifying !("a < b")

Kind regards
André
March 10, 2015
> 		.array
> 		.sort

buildin arrays have a .sort-property that is called.
March 10, 2015
On Tuesday, March 10, 2015 07:24:52 Andre via Digitalmars-d-learn wrote:
> Hi,
>
> with the new beta I get the warning I should use std.algorithm.sort instead the .sort property. I thought the std.algorithm.sort method is used in this example?
>
> void main()
> {
>   import std.algorithm: sort, uniq, map;
>   import std.array: array;
>
>   string[] arr = ["A","B","B","C"];
>
>   string[] result = arr
>       .map!(n => n) // minified
>       .array
>       .sort
>       .uniq
>       .array;
> }
>
> I want to use the sort template with the default less "a < b"
> without specifying !("a < b")

.sort on an array is going to use the built-in sort property. You need to use parens if you want to use the function in std.algorithm with an array and UFCS, e.g.

arr.sort();

- Jonathan M Davis

March 10, 2015
Thanks a lot!

Kind regards
André

On Tuesday, 10 March 2015 at 08:40:28 UTC, Jonathan M Davis wrote:
> On Tuesday, March 10, 2015 07:24:52 Andre via Digitalmars-d-learn wrote:
>> Hi,
>>
>> with the new beta I get the warning I should use
>> std.algorithm.sort instead the .sort property. I thought the
>> std.algorithm.sort method is used in this example?
>>
>> void main()
>> {
>>   import std.algorithm: sort, uniq, map;
>>   import std.array: array;
>>
>>   string[] arr = ["A","B","B","C"];
>>
>>   string[] result = arr
>>       .map!(n => n) // minified
>>       .array
>>       .sort
>>       .uniq
>>       .array;
>> }
>>
>> I want to use the sort template with the default less "a < b"
>> without specifying !("a < b")
>
> .sort on an array is going to use the built-in sort property. You need to
> use parens if you want to use the function in std.algorithm with an array
> and UFCS, e.g.
>
> arr.sort();
>
> - Jonathan M Davis

March 10, 2015
On 03/10/2015 01:40 AM, Jonathan M Davis via Digitalmars-d-learn wrote:

> .sort on an array is going to use the built-in sort property. You need to
> use parens if you want to use the function in std.algorithm with an array
> and UFCS, e.g.
>
> arr.sort();

Didn't know that. Nice!

Another option is to use renamed imports[1] but it is hard to come up with an acceptable name other than sort:

    import std.algorithm: algSort = sort, uniq, map;  // <-- HERE

// ...

    string[] result = arr
        .map!(n => n) // minified
        .array
        .algSort  // <-- HERE
        .uniq
        .array;

Ali

[1] http://dlang.org/module.html