簡體   English   中英

對象的排序數組

[英]Sorted Array of Objects

有什么方法可以維護對象的排序數組?

例如,如果我有一個對象,其屬性ID,日期,名稱以及這些對象的集合:

$col = array();

public function addNewObject($id, $date, $name)
{
    $col[] = new Object($id, $date, $name); 
    //but instead of appending, it should place it by Name desc
}

如果我調用類似getObjects的方法,它將按Name desc返回集合中的項目。

我認為有一些答案可以使對象按排序順序返回,但是出於效率考慮,我認為最好在插入時進行排序,因為在我的情況下,“ sort by”變量永遠不會改變。

更新:因此,基於注釋,每次添加一些東西時我都應該對整個數組進行排序,但這似乎占用大量內存...

由於數組始終以排序順序開始,因此我可以通過遍歷數組來標識要插入的位置(這是否有效,有更好的方法嗎?)。 一旦發現如何將新對象“插入”到陣列中?

我不認為數組會很大,但是我想以最有效的方式實現這一點。

如果您不希望在添加后重新使用該數組(盡管我會推薦這樣做;實際上,這不會是性能問題,它會使代碼保持可讀性。

但是,如果您絕對不想這樣做,則可以按照您所說的遍歷數組並找出要插入的位置:

$col = array();

public function addNewObject($id, $date, $name){
    //Find the index to insert at
    $index = 0;
    foreach($col as $i => $item){
        if($item->name > $name){
           //This item is after the item we want to insert. 
           //Use the previous index and stop traversing
           break;
        }
        $index = $i;
    }
    $col = array_splice($col, $index, 0,  new Object($id, $date, $name));
}

由於https://stackoverflow.com/a/3797526/505722,使用array_splice在任意位置插入

這是一個函數的很好的例子,該函數可以根據您要排序的任何鍵對數組進行排序

http://www.php.net/manual/zh/function.sort.php#99419

在您的示例中,您應該像這樣運行它:

  array_sort($col, 'Name', SORT_DESC)); 

請記住,每次將新項目添加到數組時,每次都會對整個數組進行排序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM