Сортировка 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);
}
}