Сортировка List - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! У меня есть строка: c=321&a=123&photo_big=url&b=444&photo=url&x=333&photo_small=123 Я разбиваю ее по & и инициализирую в листе После чего вызываю MyList.Sort(); Все хорошо сортирует: a=123 b=444 c=321 photo_big=url photo_small=123 photo=url x=333 Но как указать приоритет, так чтобы сортировка была по алфавиту, но знак _ был с низким приоритетом И после вызова сортировки получаелся такой результат: a=123 b=444 c=321 photo=url photo_big=url photo_small=123 x=333 Сортировка нужна для подписи запроса, который уходит на сервер. Беда в том, что php сортирует, как мне и нужно (photo_big\small после photo), а c# сортирует не совсем так Помогите, пожалуйста!

Решение задачи: «Сортировка List»

textual
Листинг программы
  1. class CustomStringComparer : IComparer<string>
  2.         {
  3.             private readonly IComparer<string> _baseComparer;
  4.             public CustomStringComparer(IComparer<string> baseComparer)
  5.             {
  6.                 _baseComparer = baseComparer;
  7.             }
  8.        
  9.             public int Compare(string x, string y)
  10.             {
  11.                 if (_baseComparer.Compare(x, y) == 0)
  12.                     return 0;
  13.        
  14.                
  15.                 int xIndex = x.IndexOf('_');
  16.                 int yIndex = y.IndexOf('_');
  17.                
  18.                 // _ в имени, а не в значении
  19.                 xIndex = xIndex < x.IndexOf('=') ? xIndex : -1;
  20.                 yIndex = yIndex < y.IndexOf('=') ? yIndex : -1;
  21.  
  22.                 if (xIndex >= 0 && yIndex == -1 )
  23.                 {
  24.                     // выделяем имя переменной до _ из x
  25.                     string t = x.Substring(0, xIndex);
  26.                     // выделяем полную переменную из y
  27.                     string f = y.Substring(0, y.IndexOf('='));
  28.                     if( _baseComparer.Compare(f, t) == 0)
  29.                     return 1;
  30.                 }
  31.                 if (yIndex >= 0 && xIndex == -1)
  32.                 {
  33.                     // выделяем имя переменной до _ из y
  34.                     string t = y.Substring(0, yIndex);
  35.                     // выделяем полную переменную из x
  36.                     string f = x.Substring(0, x.IndexOf('='));
  37.                     if( _baseComparer.Compare(f, t) == 0)
  38.                     return -1;
  39.                 }
  40.  
  41.                 return _baseComparer.Compare(x, y);
  42.             }
  43.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы