custom opCmp for array sort
    New 
    d-devel at here.com
       
    Fri Nov 28 06:42:44 PST 2008
    
    
  
Hello,
I originally posted this question to the wrong group, I am trying here as suggested.
I am new with D and am stuck with something I hope somebody can help me with it.
I am trying sort an array of paths which can take the two following forms:
/usr                ---> normal path
/bin=/other/bin     ---> a symlink
When I sort these paths, in the case of symlinks I want to ignore the right hand side and I just use the path before the "=" sign.
The array docs for DMD 2.0, say that can create a structure and create a opCmp function to cutomise the way sort works. I have tried this but calling .sort does not seem to pick-up my custom opCmp.
Any help would be very appreciated. I am including the code below
Thanks a lot
--------------------------------------------------------------------
Code cleaned up in d.lang group (my code was a bit messy)
import std.string: find, cmp;
import std.stdio: writefln;
struct Path {
  string thePath;
  int opCmp(Path other) {
    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("/BBB=/other_dir"): ["aa","bb","cc","dd"],
    Path("/AAA"): ["aa","bb","cc","dd"],
    Path("/BB2=/hello") : ["aa","bb","cc","dd"]
                            ];
  foreach (item; contents.keys.sort)
    writefln(item.thePath);
}
    
    
More information about the Digitalmars-d-learn
mailing list