Я использую список для отслеживания много пользовательские 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
список. Каков был бы лучший способ идти о реализации этого?
Спасибо
Если вы реализуете IComparable для объекта Row, вы можете определить пользовательский процесс сравнения, чтобы иметь возможность выполнять сортировку, которую вы хотите.
Вот вводная статья для начала работы.
Он похож на 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