2010-05-24 121 views
1

我用一个列表,以保持若干定制的轨道对象如下:排序基于自定义对象中的ArrayList列表

Public Rows As List(Of Row)() 

有2个属性,Key(字符串)和Cells(一个ArrayList)。

我需要能够根据Cells ArrayList的开发人员定义索引,在Rows内对每个进行排序。

因此,例如基于以下小号

Row1.Cells = ("b", "12") 
Row2.Cells = ("a", "23") 

Rows.Sort(0)会导致Row2是先在Rows列表。执行此操作的最佳方式是什么?

感谢

回答

1

如果你的行对象实现IComparable,你可以自定义一个比较的过程,能够做到这一点,你的愿望排序。

这是一个intro article为您开始。

+0

谢谢你,IComparable对我的'Row'对象稍作调整。 – 2010-05-24 19:09:12

+0

很高兴帮助,前几次它有点棘手,但对这些自定义分类项目非常有帮助 – 2010-05-24 19:20:32

1

它类似于它DatRow中的列,所以你可以选择(在IComparable的解决方案)使用数据视图的排序能力:

审议关于与它的列飞为你的细胞创造一个DataTabale。 例如:

Dim rows As New List(Of Row) 
Dim row = New Row("Row 1") 
Dim cell1 As New Row.Cell("b") 
Dim cell2 As New Row.Cell("12") 
row.Cells.Add(cell1) 
row.Cells.Add(cell2) 
rows.Add(row) 
row = New Row("Row 2") 
cell1 = New Row.Cell("a") 
cell2 = New Row.Cell("23") 
row.Cells.Add(cell1) 
row.Cells.Add(cell2) 
rows.Add(row) 

Dim tbl As New DataTable() 
''#are the cell count in every row equal? Otherwise you can calculate the max-count 
Dim cellCount As Int32 = 2 ''#for example 
For i As Int32 = 0 To cellCount - 1 
    Dim newCol As New DataColumn("Column " & i + 1) 
    tbl.Columns.Add(newCol) 
Next 
For rowIndex As Int32 = 0 To rows.Count - 1 
    row = rows(rowIndex) 
    Dim newRow As DataRow = tbl.NewRow 
    For cellIndex As Int32 = 0 To row.Cells.Count - 1 
     Dim cell As Row.Cell = row.Cells(cellIndex) 
     newRow(cellIndex) = cell.value 
    Next 
    tbl.Rows.Add(newRow) 
Next 
Dim view As New DataView(tbl) 
view.Sort = "Column 1" 
''#you can use the view as datasource or other purposes