Tabellen sortieren

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Tabellen sortieren

      Bei Windows kann man die Elemente eines Fensters nach verschiedenen Aspekten sortieren lassen: Z.B. nach Dateigröße, Name oder Änderungsdatum.
      Diese Funktion ist sehr nützlich für z.B. Strategiespiele, mag aber den GML-Anfänger etwas überfordern. Es ist aber ganz einfach, und schnell erklärt.

      Ich habe lange Zeit keine Verwendung für ds_priority gehabt - bis ich an die Grenzen von instance_nearest kam und das hier fand. Seitdem benutze ich diese Methode regelmäßig für verschiedene Sortierungen.

      Der wesentlich Teil ist hier der untere:

      GML-Quellcode

      1. with (object) ds_priority_add(list,id,distance_to_point(pointx,pointy));
      2. repeat (n) nearest = ds_priority_delete_min(list);
      3. }


      Nach diesem Prinzip kann man also jede Liste (hier die Instanzen von "object") nach einem bestimmen Parameter (hier "distance_to_point") sortieren.
      Für den oben genannten Zweck sollte man die ganze (sortierte) Liste nochmal speichern, bzw. jedem Element seinen Platz in der Sortierung zuweisen. Ich zeig Euch mal was ich meine:

      GML-Quellcode

      1. // sortiert Kolonien nach Name, Population, etc. (argument0)
      2. var pr,i,a;
      3. pr=ds_priority_create();
      4. for (i=0;i<colonies;i+=1)
      5. {
      6. switch argument0
      7. {
      8. case 0: a=Cname[i]; break;// sort by name
      9. case 1: a=Cpopu[i]; break;// sort by population
      10. case 2: a=Cindu[i]; break;// sort by industry
      11. }
      12. ds_priority_add(pr,i,a);
      13. }
      14. while i>0 // "i" hat noch den richtigen Wert, also brauchen wir nur runterzählen
      15. {
      16. i-=1;
      17. s=ds_priority_find_min(pr);
      18. Csort[i]=ds_priority_delete_min(pr); // und die Reihenfolge in einem Array speichern
      19. }
      20. ds_priority_destroy(pr);
      Alles anzeigen


      Wenn ich jetzt die Tabelle zeichnen will, sieht das dann nicht mehr so aus:

      GML-Quellcode

      1. // zeichnet die Liste (unsortiert)
      2. for (i=0;i<clns;i+=1)
      3. {
      4. draw_text(x,y+12*i,Cname[i]);
      5. draw_text(x,y+12*i,string(Cpopu[i]));
      6. draw_text(x,y+12*i,string(Cindu[i]));
      7. }


      sondern so:

      GML-Quellcode

      1. // zeichnet die Liste (sortiert)
      2. for (i=0;i<clns;i+=1)
      3. {
      4. v=Csort[i];
      5. draw_text(x,y+12*i,Cname[v]);
      6. draw_text(x,y+12*i,string(Cpopu[v]));
      7. draw_text(x,y+12*i,string(Cindu[v]));
      8. }


    • Könntest du da auch mal ein Example machen, denn irgendwie blick ich nicht ganz durch, wo welcher code rein muss und wo man die werte definiert und so (irgendwie komm ich nicht drauf)?

      PS: ich weis das der thread schon 612tage alt ist ^^