Сортировка 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
Листинг программы
class CustomStringComparer : IComparer<string>
        {
            private readonly IComparer<string> _baseComparer;
            public CustomStringComparer(IComparer<string> baseComparer)
            {
                _baseComparer = baseComparer;
            }
        
            public int Compare(string x, string y)
            {
                if (_baseComparer.Compare(x, y) == 0)
                    return 0;
        
                
                int xIndex = x.IndexOf('_'); 
                int yIndex = y.IndexOf('_');
                
                // _ в имени, а не в значении
                xIndex = xIndex < x.IndexOf('=') ? xIndex : -1;
                yIndex = yIndex < y.IndexOf('=') ? yIndex : -1;
 
                if (xIndex >= 0 && yIndex == -1 )
                {
                    // выделяем имя переменной до _ из x
                    string t = x.Substring(0, xIndex);
                    // выделяем полную переменную из y
                    string f = y.Substring(0, y.IndexOf('='));
                    if( _baseComparer.Compare(f, t) == 0)
                    return 1;
                }
                if (yIndex >= 0 && xIndex == -1)
                {
                    // выделяем имя переменной до _ из y
                    string t = y.Substring(0, yIndex);
                    // выделяем полную переменную из x
                    string f = x.Substring(0, x.IndexOf('='));
                    if( _baseComparer.Compare(f, t) == 0)
                    return -1;
                }
 
                return _baseComparer.Compare(x, y);
            }
        }

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


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

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

14   голосов , оценка 4.071 из 5
Похожие ответы