0

ObjectList オブジェクトをソートする可能性はありますか? 例えば:

  class MissPlane: object
{
    number  d_local
    object init(object self, number d)
    {
        d_local=d
        return self
    }
            number getD(object self)
    {
        return d_local
    }
    void print(object self)
    {
        result("d="+d_local+"\n")
    }

}
number h,k,l,hmax
hmax=2
result("start----------------"+datestamp()+"----------------------\n")

Object PlaneList
PlaneList=Alloc(ObjectList)
for(l=-hmax;l<=hmax;l++){
    for(k=-hmax;k<=hmax;k++){
        for(h=-hmax;h<=hmax;h++){
            Object MPObject=Alloc(MissPlane)
            MPObject.init(random())
            PlaneList.AddObjectToList(MPObject)
            MPObject.print()
        }
    }
}

最後に、d で並べ替える必要があります。

PS。ObjectList は、DM マニュアルに完全には記載されていません。

4

2 に答える 2

0

次の例では、オブジェクト リストをソートする単純な「バブル ソート」メソッドを作成します。

 class MissPlane: object
{
    number  d_local
    object init(object self, number d)
    {
        d_local=d
        return self
    }
            number getD(object self)
    {
        return d_local
    }
    void print(object self)
    {
        result("d="+d_local+"\n")
    }

}

object sortList( object in )
{
    object copy = in.ScriptObjectClone()    // Making a copy avoids messing with your original list...
    object sorted=Alloc(objectlist)

    while( copy.SizeOfList() )
    {
        object t = copy.ObjectAt(0)
        for (number c=1; c<copy.SizeOfList(); c++ )
        {
            if ( t.GetD() > copy.ObjectAt(c).GetD() ) 
                t = copy.ObjectAt(c);   // found a "smaller" object
        }
        sorted.AddObjectToList(t)   // add the smallest item found
        copy.RemoveObjectFromList(t)
    }

    return sorted
}

number h,hmax
hmax=20
result("start----------------"+datestamp()+"----------------------\n")

Object PlaneList
PlaneList=Alloc(ObjectList)
for(h=-0;h<hmax;h++){
    Object MPObject=Alloc(MissPlane)
    MPObject.init(random())
    PlaneList.AddObjectToList(MPObject)
}

result("start---------------- ORIGINAL ----------------------\n")
ForEach( object o; PlaneList )
    o.print()
Object sorted = sortList(PlaneList)
result("start---------------- SORTED ----------------------\n")
ForEach( object o; sorted)
    o.print()
于 2015-03-17T23:23:00.323 に答える