Сортировка Списка на основе ArrayList в пользовательском объекте

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

Public Rows As List(Of Row)()

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

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

Так, например, на основе следующего Rows

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

Rows.Sort(0) привел бы к Row2 нахождение первым в Rows список. Каков был бы лучший способ идти о реализации этого?

Спасибо

1
задан Matt Weldon 24 May 2010 в 14:27
поделиться

2 ответа

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

Вот вводная статья для начала работы.

1
ответ дан 3 September 2019 в 00:20
поделиться

Он похож на 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
ответ дан 3 September 2019 в 00:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: