0

Objects(neObj) の ArrayCollection(neList) があります。各 neObj には、ipAddress、TID などの複数のフィールドがあります。ほとんどの場合、neObj には TID と ipAddress の両方の値が含まれますが、まれに TID ではなく ipAddress が含まれます... オブジェクト (neObj) を追加した後、並べ替える必要があります。文字列のみを取得する array.sort() と同様の動作をする必要がある ArrayCollection .. (つまり、最初に no の後にアルファベット順に文字列が続く)

私が試したこと:1)neList.source.sort()とneList.refresh ..を使用していますが、neList.sourceには文字列のような単純なものではないオブジェクトがあるため、機能しませんでした2)ArrayCollectionのsortOn関数を次のように使用できないと思います1つのフィールドでのみ実行できます

私の要件: Use Case1:- ArrayCollection のオブジェクトには TID と IP の両方があります neObj1.TID="RAPC" neObj1.ipAddress="121.1.1.2"; neObj2.TID="RAPA" neObj2.ipAddress="121.1.1.1" ソート後の O/P は neObj2 neObj1 である必要があります

Use Case2:- オブジェクトの 1 つは TID neObj1.ipAddress="121.1.1.2" を持っていません。neObj2.TID="RAPA" neObj2.ipAddress="121.1.1.1" ソート後の O/P は neObj1 neObj2 である必要があります

4

1 に答える 1

0

コメントで示唆されているように、並べ替えのcompareFunctionを使用して、アイテムの並べ替え方法を決定する必要があります。

文字と数字の組み合わせの並べ替えは、デフォルトでは自然な順序がないという意味でトリッキーであることを指摘したいと思います。たとえば、1、2、および 11 を並べ替える場合、順序は 1、11、2 になります。ただし、 AS3Commons LangプロジェクトのnaturalCompareメソッドを使用してこれを解決できます。

これがあなたのケースのコードサンプルです。ソートは、他のコレクションで簡単に再利用できるように、Sort クラスのサブクラスとして実装されます。

package {

import mx.collections.Sort;

import org.as3commons.lang.StringUtils;

public class NaturalSort extends Sort {

  public function NaturalSort() {
    compareFunction = function (a:Object, b:Object, fields:Array = null):int {
      var stringA:String = (("TID" in a) ? a.TID : "AAAA") + a.ipAddress;
      var stringB:String = (("TID" in b) ? b.TID : "AAAA") + b.ipAddress;
      return StringUtils.naturalCompare(stringA, stringB);
    };
  }
}
}

これを適用するには:

var collection:ArrayCollection;
collection.sort = new NaturalSort();
collection.refresh();
于 2013-07-05T12:00:56.973 に答える