Страница: 1 |
|
Вопрос: Сортировка
|
Добавлено: 07.10.08 17:33
|
|
Автор вопроса: Diavolo
|
Доброго времени суток! Простите за, наверное, глупый вопрос, но... Как можно с помощью метода Array.Sort отсортировать произвольную структуру?
Поясняю на примере:
Public Structure test
Public a As Integer
Public b As String
End Structure
Sub Main()
Dim var(2) As test
With var(0)
.a = 2
.b = "два"
End With
With var(1)
.a = 0
.b = "ноль"
End With
With var(2)
.a = 1
.b = "один"
End With
Array.Sort(?,var)
End Sub
т.е. что нужно задать за ключ, чтобы отсортировать по "а"... понятно, что можно дополнительный массив сделать, в котором элементы "а" хранить соответственно структуре, и сортировать, используя этот массив как ключ... но может можно как-то по-иному?
Заранее сенкс всем ;)
Ответить
|
Номер ответа: 2 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #2
|
Добавлено: 07.10.08 19:39
|
В NET предусмотрено несколько способов сортировки, какой из них выбрать зависит от личных предпочтений и вкусов. Можно реализовать интерфейс IComparer, можно использовать Comparison, можно реализовать сортировку через LINQ и т.д.
Я лично предпочитаю использовать Comparison.
Выглядит это примерно следующим образом: (С#)
-
- using System;
-
- namespace ConsoleApplication1
- {
- public class Program
- {
- static void Main(string[] args)
- {
- // test employee array
- Employee[] employees = new Employee[]
- {
- new Employee("Иванов",19),
- new Employee("Петров",14),
- new Employee("Сидоров",16),
- };
-
- ShowResult(employees); // not sorted
- Array.Sort(employees, EmployeeComparison);
- ShowResult(employees); // sorted
-
- Console.ReadLine(); // wait
- }
-
- // Employee comparison (by Age)
- static int EmployeeComparison(Employee x, Employee y)
- {
- if (x == null || y == null) throw new ArgumentNullException();
- if (x.Age > y.Age)
- return 1;
- else if (x.Age < y.Age)
- return -1;
- else
- return 0;
- }
-
- static void ShowResult(Employee[] employees)
- {
- foreach (Employee emp in employees)
- Console.WriteLine("Name: {0}\tAge: {1}", emp.Name, emp.Age);
- Console.WriteLine();
- }
- }
-
- /// <summary>
- ///
- /// </summary>
- public class Employee
- {
- public Employee(string name, int age)
- {
- Name = name;
- Age = age;
- }
- public string Name { get; set; }
- public int Age { get; set; }
- public override string ToString()
- {
- return Name + ", " + Age;
- }
- }
- }
Name: Иванов Age: 19
Name: Петров Age: 14
Name: Сидоров Age: 16
Name: Петров Age: 14
Name: Сидоров Age: 16
Name: Иванов Age: 19
Ответить
|
Страница: 1 |
Поиск по форуму