ArrayList.Sort(...)

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

ArrayList.Sort(...)

Сообщение newonline » 04.12.2005 (Вс) 15:57

Я внимательно просмотрел все ресурсы сайта vbstreets, а так же yandex, но не нашел однозначного ответа. А посему посмел вынести вопрос в отдельную тему.
Прошу помочь разобраться:
например, я создаю структуру

Код: Выделить всё
    Structure Cell
        Dim CellValue As Object
        Dim CellFormula As String
      .. .
        Dim CellColor As String
    End Structure

и далее экземплярами этой структуры наполняю экземпляр класса ArrayList.

Выполнить сортировку ArrayList.Sort - это просто, если ArrayList наполнен, например, строками или числами (точнее - их экземплярами).
А как мне выполнить сортировку экземпляров вышеуказанной структуры, чтобы они были упорядочены например по CellValue или CellColor, т.е по какому либо полю?
А так же если ArrayList наполнен экземплярами какого либо класса – как их сортировать по какому-либо свойству?
По-моему, здесь применяют как-то IComparer. :roll:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.12.2005 (Вс) 16:59

newonline писал(а):просмотрел все ресурсы сайта vbstreets, а так же yandex, но не нашел однозначного ответа

Странно, странно...
http://msdn.microsoft.com/library/rus/d ... topic2.asp
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 04.12.2005 (Вс) 18:01

oops...
sorry :salut:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 04.12.2005 (Вс) 19:08

Я извиняюсь, но не могу понять как же задать поле-критерий для сортировки???:


Код: Выделить всё
Public Class myReverserClass
    Implements IComparer

    ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
       Implements IComparer.Compare
        Return New CaseInsensitiveComparer().Compare(x, y)
    End Function 'IComparer.Compare

End Class 'myReverserClass

Код: Выделить всё
Public Class Form1
    Inherits System.Windows.Forms.Form
    Structure Cell
        Dim CellValue As Object
        Dim CellFormula As String
        Dim CellColor As String
    End Structure


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim MyArray As New Collections.ArrayList
        Dim myComparer = New myReverserClass
        Dim MyCell As Cell
        Dim i As Long
        For i = 1 To 5000
            MyCell = New Cell
            MyCell.CellValue = 100 * Rnd()
            MyCell.CellFormula = "(a1+b2)/3"
            MyArray.Add(MyCell)
        Next
        MyArray.Sort(myComparer)
    End Sub
End Class
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.12.2005 (Пн) 17:42

:roll:

Код: Выделить всё
Public Class myReverserClass
    Implements IComparer

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
       Implements IComparer.Compare
        select case true
        case ctype(x, cell).CellValue < ctype(y, cell).CellValue
          return -1
        case ctype(x, cell).CellValue > ctype(y, cell).CellValue
          return 1
        case else
          return 0
        end select
       
    End Function

End Class



Разумеется, условие проверки можно свернуть и оптимизировать.
Но тогда будет опять вопрос - а как это работает :roll:
А документацию в виде MSDN, причём на русском языке и с примерами, читать будет за тебя кто?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 05.12.2005 (Пн) 21:59

sorry
down...down... :salut:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

    TopList