Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
44 / 44 / 28
Регистрация: 06.07.2011
Сообщений: 353

Сортировка List<string>

23.07.2014, 01:35. Показов 4828. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
У меня есть строка: c=321&a=123&photo_big=url&b=444&photo=ur l&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# сортирует не совсем так

Помогите, пожалуйста!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2014, 01:35
Ответы с готовыми решениями:

Сортировка двумерного List<List<string>>, по 1-ой строке, чтобы элементы 2-ой строки передвинулись в соответствии с 1-ой
Дан двумерный массив List&lt;List&lt;string&gt;&gt; , состоящий из двух строк, как его отсортировать по первой строке, чтобы элементы второй строки...

Сортировка List<List<string>>
Как отсортировать список списков по количеству элементов в элементах :D или в удобоваримом для восприятия виде(&quot;метакод&quot;)...

Сортировка списка List<string>
Задача - Получить отсортированный список полных имен файлов. Проблема в том, что когда файлы с однотипными названиями и номером на...

2
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
23.07.2014, 02:34
Лучший ответ Сообщение было отмечено objaa как решение

Решение

Тут, видимо, дело в том, что php понимает отдельные слова, а c# нет. Т.е. для php photo= — это два "слова": "photo" и "=", а для c# — одно. Поэтому нужно заставить С# понять, что это два слова. Как? Поставить перед "=" пробел, отсортировать, а затем удалить
C#
1
2
3
4
5
6
7
static void Main(string[] args) {
    List<string> MyList;
    MyList = @"c=321&a=123&photo_big=url&b=444&photo=url&x=333&photo_small= 123".Replace("=", " =").Split('&').ToList<string>();
    MyList.Sort();
    MyList.ForEach(s =>Console.WriteLine(s.Replace(" =", "="));
    Console.Read();
}
Code
1
2
3
4
5
6
7
a=123
b=444
c=321
photo=url
photo_big=url
photo_small= 123
x=333
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
23.07.2014, 13:43
Лучший ответ Сообщение было отмечено objaa как решение

Решение

objaa, ViterAlex,
Или создать свой компаратор, где и учесть "приоритет"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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);
            }
        }
Тогда сортировка будет выглядеть так
C#
1
2
var comparer = new CustomStringComparer(StringComparer.InvariantCultureIgnoreCase);
MyList.Sort(comparer);
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.07.2014, 13:43
Помогаю со студенческими работами здесь

Разбить List<string> на несколько обьектов c List<string>
Задумался как я то кусочками все делить оказалось не так уж просто :scratch: List&lt;string&gt; Разбить на несколько...

Конвертировать один элемент из List<List<Class>> в list и string
Как можно перевести один выбранный элемент из List&lt;List&lt;Data&gt;&gt; myList в list и string? Например, myList. Сейчас я могу с помощью...

Как передать list<string> в поток и как такой же list<string> вывести из потока?
Как передать list&lt;string&gt; в поток и как такой же list&lt;string&gt; вывести из потока в richtextbox? Покажите пример.

List<string> или все же List<StringBuilder>, что лучше использовать?
Добрый день, хочется узнать с точки зрения производительности что подходит лучше в данном случае. Есть List&lt;List&lt;T&gt;&gt;, в...

Необходимо создать dll в которой буду обрабатывать list<list<string>>
Необходимо создать dll в которой буду обрабатывать list&lt;list&lt;string&gt;&gt; как объявить методы класса чтобы я задавал на вход экземпляр...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru