custom opCmp for array sort

Bill Baxter wbaxter at gmail.com
Mon Dec 1 02:55:32 PST 2008


On Mon, Dec 1, 2008 at 7:23 PM, New <here at nowhere.net> wrote:
> Thanks very much indeed for your help. The version posted does work. Unfortunately I won't be able to use D for my project, this bug has scared the management, D is still a moving target. I will have to wait until it is more stable.

D1 is pretty stable, and I'm pretty sure that's what most folks are
using these days, actually.

--bb


> Cheers.
>
>
> Gide Nwawudu Wrote:
>
>> On Fri, 28 Nov 2008 13:58:28 -0500, Kagamin <spam at here.lot> wrote:
>>
>> >just found it accidentally
>> >http://d.puremagic.com/issues/show_bug.cgi?id=1309
>>
>> Yep, this issue prevents Path.opCmp from being called. The version
>> below works.
>>
>>
>> import std.string: find, cmp;
>> import std.stdio: writefln;
>> import std.algorithm : sort;
>>
>> struct Path {
>>     string thePath;
>>
>>     int opCmp(Path other) {
>>       writefln("Path.opCmp");
>>         int pos;
>>         string a, b;
>>
>>         pos = find(this.thePath, "=");
>>         if (pos > -1)
>>             a = this.thePath[0 .. pos];
>>         else
>>             a = this.thePath;
>>
>>         pos = find(other.thePath, "=");
>>         if (pos > -1)
>>             b = other.thePath[0 .. pos];
>>         else
>>             b = other.thePath;
>>
>>         return cmp(a, b);
>>     }
>> }
>>
>> void main() {
>>     string[][Path] contents = [
>>         Path("/002=/other_dir"): ["aa","bb","cc","dd"],
>>         Path("/001"): ["aa","bb","cc","dd"],
>>         Path("/002=/hello") : ["aa","bb","cc","dd"]
>>     ];
>>
>>     Path[] myPaths = contents.keys.dup;
>>     //myPaths.sort; // Does not call Path.opCmp
>>     sort(myPaths); // calls Path.opCmp
>>
>>     foreach (item; myPaths)
>>         writefln(item.thePath);
>> }
>
>


More information about the Digitalmars-d-learn mailing list