Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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


т.е. что нужно задать за ключ, чтобы отсортировать по "а"... понятно, что можно дополнительный массив сделать, в котором элементы "а" хранить соответственно структуре, и сортировать, используя этот массив как ключ... но может можно как-то по-иному?
Заранее сенкс всем ;)

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 07.10.08 17:36
На VB6 я бы ручками сортировал. Насчет дотнета хз

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 07.10.08 19:39
В NET предусмотрено несколько способов сортировки, какой из них выбрать зависит от личных предпочтений и вкусов. Можно реализовать интерфейс IComparer, можно использовать Comparison, можно реализовать сортировку через LINQ и т.д.
Я лично предпочитаю использовать Comparison.
Выглядит это примерно следующим образом: (С#)
  1.  
  2. using System;
  3.  
  4. namespace ConsoleApplication1
  5. {
  6.     public class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             // test employee array
  11.             Employee[] employees = new Employee[]
  12.                     {
  13.                         new Employee("Иванов",19),
  14.                         new Employee("Петров",14),
  15.                         new Employee("Сидоров",16),
  16.                     };
  17.  
  18.             ShowResult(employees); // not sorted
  19.             Array.Sort(employees, EmployeeComparison);
  20.             ShowResult(employees); // sorted
  21.  
  22.             Console.ReadLine(); // wait
  23.         }
  24.  
  25.         // Employee comparison (by Age)
  26.         static int EmployeeComparison(Employee x, Employee y)
  27.         {
  28.             if (x == null || y == null) throw new ArgumentNullException();
  29.             if (x.Age > y.Age)
  30.                 return 1;
  31.             else if (x.Age < y.Age)
  32.                 return -1;
  33.             else
  34.                 return 0;
  35.         }
  36.  
  37.         static void ShowResult(Employee[] employees)
  38.         {
  39.             foreach (Employee emp in employees)
  40.                 Console.WriteLine("Name: {0}\tAge: {1}", emp.Name, emp.Age);
  41.             Console.WriteLine();
  42.         }
  43.     }
  44.  
  45.     /// <summary>
  46.     ///
  47.     /// </summary>
  48.     public class Employee
  49.     {
  50.         public Employee(string name, int age)
  51.         {
  52.             Name = name;
  53.             Age = age;
  54.         }
  55.         public string Name { get; set; }
  56.         public int Age { get; set; }
  57.         public override string ToString()
  58.         {
  59.             return Name + ", " + Age;
  60.         }
  61.     }
  62. }




Name: Иванов Age: 19
Name: Петров Age: 14
Name: Сидоров Age: 16

Name: Петров Age: 14
Name: Сидоров Age: 16
Name: Иванов Age: 19

Ответить

Номер ответа: 3
Автор ответа:
 Diavolo



Вопросов: 6
Ответов: 46
 Профиль | | #3 Добавлено: 07.10.08 19:39
Executioner пишет:
На VB6 я бы ручками сортировал. Насчет дотнета хз

Ручками не интересно. В общем-то, если добавить некий массив help(2) и в него внести соответствующие значения var(i).a, то командой Array.Sort(help,var) все сделается как нужно... только не очень хочется делать этот дополнительный массивчик, потому и спрашиваю, может кто знает, как без него обойтись.

Ответить

Номер ответа: 4
Автор ответа:
 Diavolo



Вопросов: 6
Ответов: 46
 Профиль | | #4 Добавлено: 07.10.08 19:46
EROS
Спасибо :) Значит все-таки придется писать чуть-чуть кода :) Кстати, я в общем-то на C# и пишу, так что в тему совсем пример получился ). А не подскажешь какой-нить подобный ресурс по диесу (подобный этому), русскоязычный и с такими же приветливыми людями?! :)

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 07.10.08 19:54
А не подскажешь какой-нить подобный ресурс по диесу

Язык реализации в данном случае роли не играет . Это может быть абсолютно любой форум где люди пишут на НЕТ..

з.ы. Оставайся мальчик с нами - будешь нашим королем..
(из мультфильма)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам