Re: Reverse and sort array elements

2018-12-18 Thread Andrea Fontana via Digitalmars-d-learn

On Tuesday, 18 December 2018 at 12:47:59 UTC, Andrey wrote:

On Tuesday, 18 December 2018 at 12:32:35 UTC, angel wrote:

On Tuesday, 18 December 2018 at 12:07:37 UTC, Andrey wrote:


Thank you everybody.
Here was another problem that local variable 'array' shadows 
function 'array()' from std.array.


You call "array" the enum just like the array() function.
Change enum array into enum arr and array.map!... into arr.map!...


Re: Reverse and sort array elements

2018-12-18 Thread Andrey via Digitalmars-d-learn

On Tuesday, 18 December 2018 at 12:32:35 UTC, angel wrote:

On Tuesday, 18 December 2018 at 12:07:37 UTC, Andrey wrote:


Thank you everybody.
Here was another problem that local variable 'array' shadows 
function 'array()' from std.array.


Re: Reverse and sort array elements

2018-12-18 Thread Simen Kjærås via Digitalmars-d-learn

On Tuesday, 18 December 2018 at 12:07:37 UTC, Andrey wrote:

Hi,
Have array:

enum array = ["qwerty", "a", "baz"];

Need to reverse and sort array elements to get this result:

[a, ytrewq, zab]

Did this:

enum result = array.map!(value => value.retro()).sort();

Got:
Error: template std.algorithm.sorting.sort cannot deduce 
function from argument types !()(MapResult!(__lambda1, 
string[])), candidates are:
/usr/include/dmd/phobos/std/algorithm/sorting.d(1849,1):
std.algorithm.sorting.sort(alias less = "a < b", SwapStrategy 
ss = SwapStrategy.unstable, Range)(Range r) if ((ss == 
SwapStrategy.unstable && (hasSwappableElements!Range || 
hasAssignableElements!Range) || ss != SwapStrategy.unstable && 
hasAssignableElements!Range) && isRandomAccessRange!Range && 
hasSlicing!Range && hasLength!Range)


How to solve the problem?


There are in fact to instances of the same problem here:
The problem is map and retro are lazy - they return an element at 
a time, and so can't be sorted. You will need to make a arrays 
from them:


import std.array : array;
import std.range : retro;
import std.algorithm : map, sort;

enum arr = ["qwerty", "a", "baz"];
enum result = arr
.map!(value => value.retro().array)
.array // This creates an array from map's 
result.

.sort();

--
  Simen


Re: Reverse and sort array elements

2018-12-18 Thread angel via Digitalmars-d-learn

On Tuesday, 18 December 2018 at 12:07:37 UTC, Andrey wrote:

Hi,
Have array:

enum array = ["qwerty", "a", "baz"];

Need to reverse and sort array elements to get this result:

[a, ytrewq, zab]

Did this:

enum result = array.map!(value => value.retro()).sort();

Got:
Error: template std.algorithm.sorting.sort cannot deduce 
function from argument types !()(MapResult!(__lambda1, 
string[])), candidates are:
/usr/include/dmd/phobos/std/algorithm/sorting.d(1849,1):
std.algorithm.sorting.sort(alias less = "a < b", SwapStrategy 
ss = SwapStrategy.unstable, Range)(Range r) if ((ss == 
SwapStrategy.unstable && (hasSwappableElements!Range || 
hasAssignableElements!Range) || ss != SwapStrategy.unstable && 
hasAssignableElements!Range) && isRandomAccessRange!Range && 
hasSlicing!Range && hasLength!Range)


How to solve the problem?


Did you try this ?

  import std.stdio;
  import std.algorithm;
  import std.range;
  import std.conv;

  void main()
  {
enum input = ["qwerty", "a", "baz"];
  	enum output = input.map!(value => 
value.retro().to!string()).array.sort();


writeln(input);
writeln(output);
  }



Reverse and sort array elements

2018-12-18 Thread Andrey via Digitalmars-d-learn

Hi,
Have array:

enum array = ["qwerty", "a", "baz"];

Need to reverse and sort array elements to get this result:

[a, ytrewq, zab]

Did this:

enum result = array.map!(value => value.retro()).sort();

Got:
Error: template std.algorithm.sorting.sort cannot deduce 
function from argument types !()(MapResult!(__lambda1, 
string[])), candidates are:
/usr/include/dmd/phobos/std/algorithm/sorting.d(1849,1):
std.algorithm.sorting.sort(alias less = "a < b", SwapStrategy ss 
= SwapStrategy.unstable, Range)(Range r) if ((ss == 
SwapStrategy.unstable && (hasSwappableElements!Range || 
hasAssignableElements!Range) || ss != SwapStrategy.unstable && 
hasAssignableElements!Range) && isRandomAccessRange!Range && 
hasSlicing!Range && hasLength!Range)


How to solve the problem?