Сортировка 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д