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

  • Автор темы Автор темы bezanetwork
  • Дата начала Дата начала

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
77
Реакции
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));
 
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
А тут обработка и сортировка именно по числам, а не по строковому значению числа (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
А тут обработка и сортировка именно по числам, а не по строковому значению числа (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
 
Спасибо за оба варианта, но не подходит. Как можно сделать, чтобы сортировалось так:
48$$$ioas90nasoidoa^
123$$$ioajsdijasjda90sdj09asjdas%
1456$$$aksodpasomdas(

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

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

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