List Sort 使用的注意幾點

來源:互聯網
上載者:User

以前有個哥們好像寫過類似的文章。當時沒有注意,今天才發現有時候Sort時候真會帶來麻煩。說說我遇到的麻煩:

我需要監控一個機器的狀態,得到的資料類似:

1-PRD 8:30:00

2-STD 8:30:00

3-PRD 9:30:00

4-STD 9:31:00

 

我把資料都放在一個List<StateItem>容器裡面,同時StateItem實現了IComparable介面,是datetime來排序。其實資料過來時候也是按照時間來排序,但是我仍然做了Sort操作。

結果問題出現了,我出來的統計報表跟以前跑的報表由差距。

PRD time : (2)-(1)+(4)-(3) = 1 Min

STD time : (3)-(2) = 1 hour

 

結果排序後,資料順序成了(1)和(2)調換了,

 

1-STD 8:30:00

2-PRD 8:30:00

3-PRD 9:30:00

4-STD 9:31:00

PRD time : (4)-(2) = 1 hour +1min

STD time : 0

 

結果大相徑庭。

總結:排序的時候要考慮到相同rank的情況。

 

另外一種情況是由於比較數接近造成的問題

int IComparable.CompareTo( stateItem item)
        {

            return Convert.Int32((this.datetime – item.datetime).TotalMinutes);
         }

 

好像沒有錯。但請考慮當totalMinutes<1為小數的情況,則無法判斷兩個對象的次序。

 

OK,轉成

return this.datetime.ticks.CompareTo(item.datetime.ticks);

 

enn….

 

關於排序的介面有2個:

1 IComparable

子項完成。

2. IComparer

容器完成

除此,Sort支援直接調用方法

 

ListExample.Sort(Method1);

 

public int Method1(item X, item Y)

{

…..

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.