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

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8
Здравствуйте. Есть список с данными
6.006/|\апельсин
1251.51/|\мандарин
3.65/|\кокос
6.951/|\ананас
0.542/|\персик
25.612/|\вишня

как отсортировать по убыванию, именно по числовому значению до /|\, чтобы вышло так

1251.51/|\мандарин
25.612/|\вишня
6.951/|\ананас
6.006/|\апельсин
3.65/|\кокос
0.542/|\персик
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
никак. разделяй данные и переноси в таблицу в разные столбцы и в таблице сортируй по столбцам.
 

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8
никак. разделяй данные и переноси в таблицу в разные столбцы и в таблице сортируй по столбцам.
вот только проблема, что не могу в экселе отсортировать так как нужно
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
вот только проблема, что не могу в экселе отсортировать так как нужно
данные всегда можно преобразовать так как надо разработчику. таблицы в зенно, таблицы в БД , вариантов куча для работы с данными.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
C#:
var list = project.Lists["Список 1"]; //вместо Список 1 - имя твоего списка (список должен быть привязан к файлу на пк)
var slovar = new Dictionary<double,string>();
var listNumber = new List<double>();

for(int i=0;i<list.Count;i++)
{
    string strCh = Regex.Match(list[i], @"(\d+\.\d+)(?=/)").Value;
    double chislo = double.Parse(strCh, System.Globalization.CultureInfo.InvariantCulture);
    string slovo = Regex.Match(list[i], @"[а-яА-Яa-zA-Z]+").Value;
    listNumber.Add(chislo);
    slovar.Add(chislo, slovo);
}

listNumber.Sort();
listNumber.Reverse();
list.Clear();

for(int i=0;i<listNumber.Count;i++)
{
    string str = listNumber[i].ToString().Replace(",", ".") + @"/|\" + slovar[listNumber[i]];
    list.Add(str);
}
 
  • Спасибо
Реакции: bezanetwork

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8
C#:
var list = project.Lists["Список 1"]; //вместо Список 1 - имя твоего списка (список должен быть привязан к файлу на пк)
var slovar = new Dictionary<double,string>();
var listNumber = new List<double>();

for(int i=0;i<list.Count;i++)
{
    string strCh = Regex.Match(list[i], @"(\d+\.\d+)(?=/)").Value;
    double chislo = double.Parse(strCh, System.Globalization.CultureInfo.InvariantCulture);
    string slovo = Regex.Match(list[i], @"[а-яА-Яa-zA-Z]+").Value;
    listNumber.Add(chislo);
    slovar.Add(chislo, slovo);
}

listNumber.Sort();
listNumber.Reverse();
list.Clear();

for(int i=0;i<listNumber.Count;i++)
{
    string str = listNumber[i].ToString().Replace(",", ".") + @"/|\" + slovar[listNumber[i]];
    list.Add(str);
}
Тип Время Сообщение
19:18:33 Выполнение действия CSharp OwnCode. Элемент с тем же ключом уже был добавлен.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
19:18:33 Выполнение действия CSharp OwnCode. Элемент с тем же ключом уже был добавлен.
Одинаковые числа попадаются. Как это обойти в моем коде не знаю... Лучше тогда, наверное, как феникс написал. Ты написал, что в екселе не можешь отсортировать. Там кубик есть операции над таблицей -> сортировка. Должен работать
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
C#:
var list = project.Lists["list"];

list.AddRange(new string[]{//наполняю список тестовыми данными
    @"6.006/|\апельсин",
    @"1251.51/|\мандарин",
    @"3.65/|\кокос",
    @"6.951/|\ананас",
    @"0.542/|\персик",
    @"25.612/|\вишня"
});

list.AddRange(list.GetItems("all", true).OrderByDescending(x=>Double.Parse(x.Split(new []{@"/|\"}, StringSplitOptions.None).First().Replace(".", ","))));
 

bezanetwork

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

list.AddRange(new string[]{//наполняю список тестовыми данными
    @"6.006/|\апельсин",
    @"1251.51/|\мандарин",
    @"3.65/|\кокос",
    @"6.951/|\ананас",
    @"0.542/|\персик",
    @"25.612/|\вишня"
});

list.AddRange(list.GetItems("all", true).OrderByDescending(x=>Double.Parse(x.Split(new []{@"/|\"}, StringSplitOptions.None).First().Replace(".", ","))));
Спасибо, работает. А как сделать непосредственно без наполнения списка тестовыми данными? просто чтобы указать список с данными?
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
Спасибо, работает. А как сделать непосредственно без наполнения списка тестовыми данными? просто чтобы указать список с данными?
убрать из кода
C#:
list.AddRange(new string[]{//наполняю список тестовыми данными
    @"6.006/|\апельсин",
    @"1251.51/|\мандарин",
    @"3.65/|\кокос",
    @"6.951/|\ананас",
    @"0.542/|\персик",
    @"25.612/|\вишня"
});
 
  • Спасибо
Реакции: bezanetwork

bezanetwork

Client
Регистрация
30.08.2020
Сообщения
73
Благодарностей
1
Баллы
8
убрать из кода
C#:
list.AddRange(new string[]{//наполняю список тестовыми данными
    @"6.006/|\апельсин",
    @"1251.51/|\мандарин",
    @"3.65/|\кокос",
    @"6.951/|\ананас",
    @"0.542/|\персик",
    @"25.612/|\вишня"
});
СПАСИБО! РАБОТАЕТ!!!
 

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