2013-03-17 45 views
1

排序自定義列表有一類與布爾

public class Camera 
{ 
    ... 
    public bool live; 
    ... 
} 

這是排序類

public class CameraSortByLive : IComparer<Camera> 
{ 
    private bool asc; 

    public CameraSortByLive(bool a) 
    { 
     this.asc = a; 
    } 

    public int Compare(Camera x, Camera y) 
    { 
      if (x.live != y.live) 
       return asc ? 0 : 1; 
      else 
       return asc ? 1 : 0; 
    } 
} 

這是我如何使用它:

List<Camera> CameraList = new List<Camera>(); 
CameraList.Sort(new CameraSortByLive(sortAsc)); 

現在,我身邊live會員我有其他會員intstring類型。對於這些類型,我有類似的排序類實現IComparer。他們沒有問題。這是live成員唯一的問題。它根本沒有排序。我希望它能夠在列表頂部或底部,但它會在中間的某個位置。我錯過了什麼?

回答

2

問題與您的比較功能。您應該聲明一些命令,如假<爲真或<爲假。在你的函數中,有時候是真的<錯誤,有時候錯誤的<是真的。

+0

真的:)它解決了,謝謝。 – Pablo 2013-03-17 16:10:40

1
public int Compare(Camera x, Camera y) 
{ 
    return (asc && x.live) ? 1 : 0; 
} 

你的代碼的問題是你不能確定列表元素相互比較的順序。所以,你在比較兩個凸輪,如果他們的live成員是等於你首先考慮的是不是第二個「更大」。所以,如果你的第一凸輪已經是「死」和第二個是「活」的,第一仍然較大。這絕對不是你想要的。

有了這個代碼,如果左凸輪是活的 - 它被認爲是比對時,無論正確的生活價值。由於我們不關心其他功能分類,我們真的不在乎的活凸輪「內部」命令(即所有活凸輪被視爲相等,以及認爲是平等的太所有deadcams)

+0

相同的結果。對不起 – Pablo 2013-03-17 16:04:56