Страница: 1 | 
		
		
			
	
		 
		
			
  
    |   | 
    
Вопрос: как сортировать массив As myClass?
     | 
    
Добавлено: 13.12.09 02:30
     | 
      | 
  
		
			
			  
    
      
Автор вопроса:   DimDoc
       | 
    
    
      
Можно ли использовать array.sort() для сортировки массива типа Класс? Хотелось бы отсортировать по одному полю типа string. 
 
Например:
 
создан класс:
 
 
Public Class Class1
 
    Private _name As String
 
    Private _x As String
 
    Public Property name() As String
 
        Get
 
            Return _name
 
        End Get
 
        Set(ByVal value As String)
 
            _name = value
 
        End Set
 
    End Property
 
    ' и так далее
 
End Class
 
[CODE]
 
Объявлен массив:
 
[CODE]Dim myArray() as Class1 
 
наполняем массив:
 
 
Redim myArray(1)
 
myArray(0) as New Class1
 
myArray(0).name = "Яна"
 
myArray(0).tel = "999-99-99"
 
myArray(1) as New Class1
 
myArray(1).name = "Анна"
 
myArray(1).tel = "111-11-11"
 
 
 
теперь хотелось бы отсортировать...
 
примерно, так 
 
array.sort(myArray) 
 
но происходит ошибка.
 
наверно, потому что не указал - по какому полю сортировать.
 
Подскажите - как сортировать такие массивы?
Ответить
        | 
    
  
		
			
		
		
			
		
	  
	  
    
      
Номер ответа: 2 Автор ответа:
   DimDoc
  
 
  Вопросов: 21 Ответов: 104 
       | 
      
 Профиль |  | #2
       | 
Добавлено:  13.12.09 03:29
       | 
    
    
      
Я с этим ещё не знаком...
 
Это отсортированный запрос???
 
Спасибо!
Ответить
        | 
    
  
	  
    
      
Номер ответа: 3 Автор ответа:
   DimDoc
  
 
  Вопросов: 21 Ответов: 104 
       | 
      
 Профиль |  | #3
       | 
Добавлено:  14.12.09 11:59
       | 
    
    
      
Попробовал!
 
Супер!!! Сортировка работает так - как надо!
 
И не надо создавать новый (сортированный) массив... Всё происходит внутри исходного массива...
 
Интересно, что при желании создать и заполнить новый отсортированный массив с помощью linq,
 
не требуется объявлять экземпляры класса с конструктором New.
 
Может я чего и не понял, но пока ошибок программы нет.
 
Даже с Option strict = on никаких проблем!
 
Спасибо!
Ответить
        | 
    
  
	  
	  
    
      
Номер ответа: 5 Автор ответа:
   DimDoc
  
 
  Вопросов: 21 Ответов: 104 
       | 
      
 Профиль |  | #5
       | 
Добавлено:  15.12.09 00:07
       | 
    
    
      
Извините... Я новичек... Ничего не понял...
 
Предыдущий пример для меня оказался понятным (хотя я linq не учил),
 
а Ваш пример для меня - тёмный лес (если конечно подробнее не объясните...)
 
Ответить
        | 
    
  
	  
    
      
Номер ответа: 6 Автор ответа:
   Artyom
  
       
  Разработчик
  Вопросов: 130 Ответов: 6602 
       | 
      
 Профиль |  | #6
       | 
Добавлено:  16.12.09 04:46
       | 
    
    
      
Есть функция, которая сравнивает 2 объекта. 
 
Если она считает что объект А больше объекта Б, она возвращает положительное число
 
Если считает что объект А меньше объекта Б, возвращает отрицательное число.
 
Если считает что оба объекта равны, то возвращает 0.
 
 
Я объявляю свою функцию сравнения 2-х объектов, которая просто сравнивает 2 свойства через String.Compare (работает точно так же).
 
 
Далее, есть метод Array.Sort, который выполняет сортировку массива, при этом для сравнения объектов в массиве принимает функцию сравнения. вызов выглядит следующим образом:
 
 
- Public Function CompareObjects (a As MyClass, b as MyClass) As Integer
  
-     Return String.Compare(a.x, b.x)
  
- End Function
  
-  
 
-  
 
- Array.Sort(myArray, AddressOf CompareObjects)
  
  
 
 
Это полная запись.
 
Благодаря возможность делать анонимные функции в VB 2008, можно сократить запись до
 
 
- Array.Sort(myArray, Function(a, b) String.Compare(a.x, b.x))
  
  
 
Здесь я не объявляю функцию отдельно, а прямо на месте создаю.
Ответить
        | 
    
  
Страница: 1 | 
 
		
			Поиск по форуму