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

Reply via email to