2016-03-24 9 views
1

Ich versuche, eine Arraycollection mit dieser Art zu sortieren:Flex Sort ist die Sortierung, wo nichts (in einer Arraycollection) sortiert werden sollen

private function sortArray(questions:ArrayCollection):void 
    { 
     questions.sort = new Sort(); 
     questions.sort.fields = [new SortField("rank")]; 
     questions.sort.compareFunction = rankFunction; 
     questions.refresh(); 
    } 

    private function rankFunction(a:int, b:int, array:Array = null):int 
    { 
     if(a == b) 
     { 
      return 0; 
     } 
     if(a>b) 
     { 
      return 1; 
     } 
     else 
     { 
      return -1; 
     } 
    } 

gibt es 23 Objekte und alle haben den Rang = 0

I erwartet, dass nichts geändert wird, aber nach der Aktualisierung tauschten die Elemente an der Position 0 und 11 der ArrayCollection ihre Position.

Im rankFunction wird immer 0 zurückgegeben

Kann mir jemand sagen, was falsch ist hier los?

Antwort

1

ASDoc says die Vergleichsfunktion sollte folgende Signatur haben:

function [name](a:Object, b:Object, fields:Array = null):int 

und dass die fields Array spezifiziert die Objektfelder.

So sortieren nicht Feldwerte extrahieren für Sie. Sie sollten es selbst tun.

Ihre Frage angeht, so scheint es, dass AS3 implizit Objects zu ints konvertiert rankFunction aufruft. Wenn ja, wird items durch einen internen Code verglichen, der irgendwie der Reihenfolge der Artikelerstellung entspricht.

+1

Gleicher Effekt bei Verwendung: private Funktion sortArray (Array: ArrayCollection): void { var Sortierung: Sort = new Sort(); sort.compareFunction = rankFunction; array.sort = sortieren; array.refresh(); } private Funktion rankFunction (a: Objekt, b: Objekt, Array: Array = null): int { if (a.rank == b.rank) { return 0; } if (a.rank> b.rank) { zurück 1; } else { Rückgabe -1; } } – derChris

+1

Eigentlich haben Sie nur 'int' für' Object' geändert. Mein Hauptpunkt war, dass Sie Felder selbst aus dem Objekt extrahieren sollten. –

+1

Nein, das habe ich gemacht: if (a.rank == b.rank) – derChris

Verwandte Themen