Reverse and sort array elements
Simen Kjærås
simen.kjaras at gmail.com
Tue Dec 18 12:31:02 UTC 2018
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
More information about the Digitalmars-d-learn
mailing list