Как отсортировать таблицу сразу по двум столбцам?

stregol

Client
Регистрация
21.04.2013
Сообщения
10
Благодарностей
1
Баллы
3
Салют всем.
Собственно, сабж.

К примеру есть такая таблица (во вложении).
Надо отсортировать по столбцу А и потом по столбцу С (чтоб как бы была сортировка по С внутри каждого массива значений А)

Я так понимаю, что лучше всего это писать в C#?

Заранее спасибо
 

Вложения

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Прошу прощения, что поднимаю старую тему. Нужно то же самое. Пробовал воспользоваться штатной сортировкой по двум столбцам, нужного эффекта не получается. Есть ли какое-то решение?
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Есть, скажем, столбцы A и B с такими значениями:

700;100
100;200
200;100
200;200
300;100
900;200

Нужно приоритетно отсортировать по столбцу B (сортировка по убыванию, как числа), а в случае равных значений в столбце B, выше должны идти те строки, у которых значения в столбце A тоже больше:

900;200
200;200
100;200
700;100
300;100
200;100
 
  • Спасибо
Реакции: Radzhab

LaGir

Client
Регистрация
01.10.2015
Сообщения
211
Благодарностей
854
Баллы
93
Нужно приоритетно отсортировать по столбцу B (сортировка по убыванию, как числа), а в случае равных значений в столбце B, выше должны идти те строки, у которых значения в столбце A тоже больше
На основе этого сниппета:
C#:
IZennoTable table = project.Tables["Таблица 1"]; // таблица проекта
int i1 = 1; // номер столбца, по которому сортировать (приоритетный)
int i2 = 0; // номер столбца, по которому сортировать (второстепенный)
List<string> tmpList = new List<string>(); // создаем темповый список
Enumerable.Range(0, table.RowCount).ToList().ForEach(x => tmpList.Add(string.Join(";", table.GetRow(x)))); // добавляем в список все строки из таблицы, ";" - разделитель столбцов
tmpList = tmpList.OrderByDescending(s => s.Split(';')[i2].Length).ThenByDescending(s => s.Split(';')[i2]).ToList(); // сортируем строки списка по убыванию
tmpList = tmpList.OrderByDescending(s => s.Split(';')[i1].Length).ThenByDescending(s => s.Split(';')[i1]).ToList(); // сортируем строки списка по убыванию
table.Clear(); // очищаем таблицу
Enumerable.Range(0, tmpList.Count).ToList().ForEach(x => table.AddRow(tmpList[x])); // добавляем в таблицу  все строки из списка
 
  • Спасибо
Реакции: paffik, Rimen и Enigma

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Огромное спасибо! То, что надо! :az:
 

Rimen

Client
Регистрация
28.10.2019
Сообщения
405
Благодарностей
236
Баллы
43
На основе этого сниппета:
C#:
IZennoTable table = project.Tables["Таблица 1"]; // таблица проекта
int i1 = 1; // номер столбца, по которому сортировать (приоритетный)
int i2 = 0; // номер столбца, по которому сортировать (второстепенный)
List<string> tmpList = new List<string>(); // создаем темповый список
Enumerable.Range(0, table.RowCount).ToList().ForEach(x => tmpList.Add(string.Join(";", table.GetRow(x)))); // добавляем в список все строки из таблицы, ";" - разделитель столбцов
tmpList = tmpList.OrderByDescending(s => s.Split(';')[i2].Length).ThenByDescending(s => s.Split(';')[i2]).ToList(); // сортируем строки списка по убыванию
tmpList = tmpList.OrderByDescending(s => s.Split(';')[i1].Length).ThenByDescending(s => s.Split(';')[i1]).ToList(); // сортируем строки списка по убыванию
table.Clear(); // очищаем таблицу
Enumerable.Range(0, tmpList.Count).ToList().ForEach(x => table.AddRow(tmpList[x])); // добавляем в таблицу  все строки из списка
Подскажите пожалуйста — как можно этот же функционал выполнить для гуглтаблицы с разделителем = tab?
Этот код функционал выполняет, но данные назад в таблицу заливает с разделителем ; — как следствие табличка выглядит криво
 

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