Perlの代替として(5)

sort(1)

こんな感じでソートする。


import std.stream;
import std.cstream;
import std.string;

void main(char[][] arg) {
auto a = [ 3, 11, 2 ];
a.sort;
dout.writefln(join(a)); // 2,3,11
}

char [] join(int [] a, char [] sep = ",") {
char [] str = "";
for(int i = 0; i < a.length - 1; i++)
str ~= toString(a[i]) ~ sep;
if(a.length > 0)
str ~= toString(a[a.length-1]);
return str;
}

降順にしたいときは、


auto a = [ 3, 11, 2 ];
a.sort.reverse;
dout.writefln(join(a)); // 11,3,2

文字列だと、


char [][] a = [ "3", "11", "2" ];
a.sort;
dout.writefln(join(a, ",")); // 11,2,3

2次元配列をソートしてみると、


import std.stream;
import std.cstream;
import std.string;

void main(char[][] arg) {
auto a = [ 3, 11, 2 ];
int [2][] b;
b.length = a.length;
for(int i = 0; i < a.length; i++) {
b[i][0] = a[i];
b[i][1] = a[i];
}
b.sort;

foreach(d; b) {
dout.writefln("%2d %2d", d[0], d[1]);
}
}

出力は、


2 3
3 11
11 2

一番左の列しかソートしてくれないらしい。


比較関数を引数にできないらしく、あまり柔軟性がない。