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

LiMe

Client
Регистрация
10.12.2015
Сообщения
616
Благодарностей
336
Баллы
63
Подскажите пожалуйста, есть данные в списке в формате
text;text$число
И нужно отсортировать этот список по убыванию числа, нашел на форуме решение:

C#:
var lst = project.Lists["signal"].ToList();// зеновский список
var z = lst.OrderByDescending(x => Convert.ToInt32(Regex.Match(x, @"(?<=\(\ ).+?(?=\ /)").Value)).ToList();
project.Lists["signal"].Clear();
project.Lists["signal"].AddRange(z);
Но после того, как меняю на свою регулярку, почему-то выходит по ошибке.
Заранее благодарен за помощь.
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 819
Баллы
113
Попробуйте это:
C#:
var lst = project.Lists["signal"].ToList();// зеновский список
var z = lst.OrderByDescending(x => Convert.ToInt32(Regex.Match(x, @"(?<=\$)\d+$").Value)).ToList();
project.Lists["signal"].Clear();
project.Lists["signal"].AddRange(z);
 

LiMe

Client
Регистрация
10.12.2015
Сообщения
616
Благодарностей
336
Баллы
63
Попробуйте это:
C#:
var lst = project.Lists["signal"].ToList();// зеновский список
var z = lst.OrderByDescending(x => Convert.ToInt32(Regex.Match(x, @"(?<=\$)\d+$").Value)).ToList();
project.Lists["signal"].Clear();
project.Lists["signal"].AddRange(z);
К сожалению ...
87608
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 819
Баллы
113
Что-то не то попадает в Convert.ToInt32. Можно небольшой пример шаблона?
 

LiMe

Client
Регистрация
10.12.2015
Сообщения
616
Благодарностей
336
Баллы
63
Что-то не то попадает в Convert.ToInt32. Можно небольшой пример шаблона?
Шаблона по сути нет, есть данные на входе в таком вот формате:
HTML:
text;text$1.69
text;text$23720.81
text;text$15301.98
text;text$0.14
text;text$2739.88
text;text$4922.79
text;text$91964.79
text;text$392.92
text;text$0
text;text$17.08
text;text$4685.67
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 509
Благодарностей
1 311
Баллы
113
Шаблона по сути нет, есть данные на входе в таком вот формате:
HTML:
text;text$1.69
text;text$23720.81
text;text$15301.98
text;text$0.14
text;text$2739.88
text;text$4922.79
text;text$91964.79
text;text$392.92
text;text$0
text;text$17.08
text;text$4685.67
C#:
// *Список* заменить на имя списка из зенно  c данными
var lst = project.Lists["Список"].ToList();// зеновский список
var z = lst.OrderByDescending(x => double.Parse(Regex.Match(x, @"(?<=\$)(\d+\.\d+|\d+)").Value.Replace(".",","))).ToList();
// *sss* заменить на зенносписок куда складируем
project.Lists["sss"].Clear();
project.Lists["sss"].AddRange(z);
Или такой вариант

C#:
// Формат для Double цифр
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");

// *Список* заменить на имя списка из зенно
var lst = project.Lists["Список"].ToList();// зеновский список
var z = lst.OrderByDescending(x => double.Parse(Regex.Match(x, @"(?<=\$)(\d+\.\d+|\d+)").Value, culture)).ToList();
// *sss* заменить на зенносписок куда складируем
project.Lists["sss"].Clear();
project.Lists["sss"].AddRange(z);
 
  • Спасибо
Реакции: LiMe

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
C#:
//взял ваш пример
string[] input = {"text;text$1.69",
"text;text$23720.81",
"text;text$15301.98",
"text;text$0.14",
"text;text$2739.88",
"text;text$4922.79",
"text;text$91964.79",
"text;text$392.92",
"text;text$0",
"text;text$17.08",
"text;text$4685.67"};
//залили массив в список
List<string> l = new List<string>(input);
//отсортировали
var res = l.OrderByDescending(x => Double.Parse(x.Split(new char[]{'$'})[1], System.Globalization.CultureInfo.InvariantCulture)).ToList();
 
  • Спасибо
Реакции: LiMe

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