Сортировка списка на основе ArrayList в пользовательском объекте - PullRequest
1 голос
/ 24 мая 2010

Я использую список для отслеживания ряда пользовательских Row объектов следующим образом:

Public Rows As List(Of Row)()

Row имеет 2 свойства: Key (строка) и Cells (ArrayList).

Мне нужно иметь возможность сортировать каждый Row в пределах Rows на основе определенного разработчиком индекса Cells ArrayList.

Так, например, основываясь на следующем Row s

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

Rows.Sort(0) приведет к тому, что Row2 окажется первым в списке Rows. Как лучше всего реализовать это?

Спасибо

Ответы [ 2 ]

1 голос
/ 24 мая 2010

Он похож на DatRow с его столбцами, так что вы можете альтернативно (решению IComparable) использовать возможность сортировки DataView:

Рассмотрите возможность создания 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
1 голос
/ 24 мая 2010

Если вы реализуете IComparable в своем объекте Row, вы можете определить собственный процесс сравнения, чтобы иметь возможность выполнять желаемую сортировку.

Вот вступительная статья , с которой можно начать.

...