Сортировка списка

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8
Есть список строк
123$$$ioajsdijasjda90sdj09asjdas%
48$$$ioas90nasoidoa^
1456$$$aksodpasomdas(
Как их отсортировать по значению, которое идет до $$$? То есть не по длине строки и так далее, а именно по значению до $$$.

Чтобы конечный результат был таким
48$$$ioas90nasoidoa^
123$$$ioajsdijasjda90sdj09asjdas%
1456$$$aksodpasomdas(

Использовал этот сниппет более полугода, оказалось что он сортирует по длине строки
List<string> numbers = project.Lists["list1"].ToList();//
project.Lists["list1"].Clear();
numbers = numbers.OrderBy(s=>s.Length).ThenBy(s=>s).ToList();
numbers.ForEach(s=>project.Lists["list1"].Add(s));
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
C#:
List<string> numbers = project.Lists["list1"].ToList();//
project.Lists["list1"].Clear();
numbers = numbers.OrderBy(s=>s.Split('$').First().ToString()).ToList();
numbers.ForEach(s=>project.Lists["list1"].Add(s));
 
  • Спасибо
Реакции: bezanetwork

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
А тут обработка и сортировка именно по числам, а не по строковому значению числа (48 будет идти ДО 123, а не после)
C#:
List<string> numbers = project.Lists["list1"].ToList();//
project.Lists["list1"].Clear();
numbers = numbers.OrderBy(s=>int.Parse(s.Split('$').First().ToString())).ToList();
numbers.ForEach(s=>project.Lists["list1"].Add(s));
Обработок на случай ошибки нет.
 
  • Спасибо
Реакции: bezanetwork

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8
А тут обработка и сортировка именно по числам, а не по строковому значению числа (48 будет идти ДО 123, а не после)
C#:
List<string> numbers = project.Lists["list1"].ToList();//
project.Lists["list1"].Clear();
numbers = numbers.OrderBy(s=>int.Parse(s.Split('$').First().ToString())).ToList();
numbers.ForEach(s=>project.Lists["list1"].Add(s));
Обработок на случай ошибки нет.
Спасибо за оба варианта, но не подходит. Как можно сделать, чтобы сортировалось так:
48$$$ioas90nasoidoa^
123$$$ioajsdijasjda90sdj09asjdas%
1456$$$aksodpasomdas(

то есть чтобы 5-42-672-9618
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 237
Благодарностей
573
Баллы
113
Спасибо за оба варианта, но не подходит. Как можно сделать, чтобы сортировалось так:
48$$$ioas90nasoidoa^
123$$$ioajsdijasjda90sdj09asjdas%
1456$$$aksodpasomdas(

то есть чтобы 5-42-672-9618
Откуда вы взяли 5-42-672-9618?
Второй вариант сортирует по числовому значению от меньшего к большему
 
  • Спасибо
Реакции: bezanetwork

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8
Откуда вы взяли 5-42-672-9618?
Второй вариант сортирует по числовому значению от меньшего к большему
Извиняюсь, не верно затестил. Подходит второй вариант, только есть проблема, что с моими строками этот сниппет не работает

Тип Время Сообщение
12:17:00 Выполнение действия CSharp OwnCode. Значение было недопустимо малым или недопустимо большим для Int32.
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 261
Благодарностей
679
Баллы
113
Извиняюсь, не верно затестил. Подходит второй вариант, только есть проблема, что с моими строками этот сниппет не работает

Тип Время Сообщение
12:17:00 Выполнение действия CSharp OwnCode. Значение было недопустимо малым или недопустимо большим для Int32.
скок цифр то в строке?) на примере максимум 4 , а по факту?
 
  • Спасибо
Реакции: bezanetwork

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
C#:
var list = project.Lists["Список 1"];
int s_len_max = 100; // максимальная длина числа

var list_sorted = list.OrderBy(x=> {
    string s_part = x.Split('$')[0];
    return new string('0', s_len_max - s_part.Length) + s_part;
}).ToList();

list.Clear();
list.AddRange(list_sorted);
 
  • Спасибо
Реакции: bezanetwork

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8
C#:
var list = project.Lists["Список 1"];
int s_len_max = 100; // максимальная длина числа

var list_sorted = list.OrderBy(x=> {
    string s_part = x.Split('$')[0];
    return new string('0', s_len_max - s_part.Length) + s_part;
}).ToList();

list.Clear();
list.AddRange(list_sorted);
Благодарю!
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)