none
Сортировка массива структур C# RRS feed

  • Вопрос

  • Доброго всем времени суток. Вновь прошу совета:

     

    Есть структура:

            struct Priece
            {
                public string tovar;
                public string mag;
                public decimal stoim;
            }
    


    и есть массив:

    Priece[] Spisok = new Priece[5];
    

     

    Вопрос: как отсортировать содержимое массива в соответствии с полем tovar? То есть нужно упорядочить названия товаров по алфавиту. Самым тщательным образом перечитал MSDN (Array.Sort();) - но так и не разобрался в сортировке массивов, ибо там интерфейсы и прочее, что меня пугает. :)


    MSDN AA User
    16 октября 2011 г. 12:27

Ответы

  • > Вопрос: как отсортировать содержимое массива в соответствии с полем tovar?

    using System.Linq;
    ...
    Priece[] Spisok = new Priece[] 
    {
        new Priece() { tovar="t3" },
        new Priece() { tovar="t1" },
        new Priece() { tovar="t2" }
    };
    foreach (var p in Spisok.OrderBy(itm => itm.tovar))
    {
        System.Diagnostics.Trace.WriteLine(p.tovar);
    }
    

    • Помечено в качестве ответа asdfxcbneftyherwe 16 октября 2011 г. 17:48
    16 октября 2011 г. 14:20
  • или так
    Array.Sort(Spisok, new Comparison<Priece>((a, b) => a.tovar.CompareTo(b.tovar)));
    

    • Помечено в качестве ответа asdfxcbneftyherwe 16 октября 2011 г. 17:48
    16 октября 2011 г. 15:00
  • new Comparison<Price> создает делегат на функцию.
    функция вызывается из метода Array.Sort;
    из метода Array.Sort в функцию передаются два экземпляра Price.
    функция сравнивает значения Price.tovar с помощью метода String.CompareTo и возвращает результат -1 или 0 или 1; на основе полученного значения Array.Sort сортирует экземпляры Price в массиве Spisok.

    • Помечено в качестве ответа asdfxcbneftyherwe 16 октября 2011 г. 20:22
    16 октября 2011 г. 20:14

Все ответы

  • > Вопрос: как отсортировать содержимое массива в соответствии с полем tovar?

    using System.Linq;
    ...
    Priece[] Spisok = new Priece[] 
    {
        new Priece() { tovar="t3" },
        new Priece() { tovar="t1" },
        new Priece() { tovar="t2" }
    };
    foreach (var p in Spisok.OrderBy(itm => itm.tovar))
    {
        System.Diagnostics.Trace.WriteLine(p.tovar);
    }
    

    • Помечено в качестве ответа asdfxcbneftyherwe 16 октября 2011 г. 17:48
    16 октября 2011 г. 14:20
  • или так
    Array.Sort(Spisok, new Comparison<Priece>((a, b) => a.tovar.CompareTo(b.tovar)));
    

    • Помечено в качестве ответа asdfxcbneftyherwe 16 октября 2011 г. 17:48
    16 октября 2011 г. 15:00
  • Ой, объясните пожалуйста, что делает второй аргумент. Чтото он слишком длинный о_О
    MSDN AA User
    16 октября 2011 г. 18:51
  • new Comparison<Price> создает делегат на функцию.
    функция вызывается из метода Array.Sort;
    из метода Array.Sort в функцию передаются два экземпляра Price.
    функция сравнивает значения Price.tovar с помощью метода String.CompareTo и возвращает результат -1 или 0 или 1; на основе полученного значения Array.Sort сортирует экземпляры Price в массиве Spisok.

    • Помечено в качестве ответа asdfxcbneftyherwe 16 октября 2011 г. 20:22
    16 октября 2011 г. 20:14