How to sort a multidimensional ndslice?

9il ilyayaroshenko at gmail.com
Wed Aug 19 10:30:57 UTC 2020


On Tuesday, 18 August 2020 at 13:07:56 UTC, Arredondo wrote:
> On Tuesday, 18 August 2020 at 04:07:56 UTC, 9il wrote:
>> To reorder the columns data according to precomputed index:
>> auto index = a.byDim!1.map!sum.slice;
>
> Hello Ilya, thanks for the answer!
>
> Unfortunately I can't use it because I don't have (and can't 
> define) a sorting index for my columns. I only have a predicate 
> `larger(c1, c2)` that compares two columns to decide which one 
> is "larger".
>
> Cheers!
> Armando.

This should work. But reallocates the data.

/+dub.sdl:
dependency "mir-algorithm" version="~>3.9.24"
+/
import std.stdio;

import mir.array.allocation;
import mir.ndslice;
import mir.ndslice.sorting;

void main() {
     auto a = [[1, -1, 3, 2],
               [0, -2, 3, 1]].fuse;

     writeln(a);
     auto b = a.byDim!1.array;
     b.sort!larger;
	auto c = b.fuse!1;
     writeln(c);
}

auto larger(C)(C u, C v) {
     import mir.math.sum : sum;
     return sum(u) > sum(v);
}



More information about the Digitalmars-d-learn mailing list