Обработка таблицы в коллекциях

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 340
Баллы
113
Подскажите как красиво обработать такую таблицу для общего случая:
Код:
12-03-2020   Сайт1   2000
13-03-2020   Сайт1   2200
12-03-2020   Сайт2   1000
13-03-2020   Сайт2   3000
12-03-2020   Сайт3   5000
13-03-2020   Сайт3   7000
.....
в такую строку:
[12-03-2020,13-03-2020],['Сайт1',2000,2200],['Сайт2',3000,5000],['Сайт3',5000,7000],...
Даты должны быть уникальными, а дат и сайтов может быть много. При этом сортировка таблицы может быть рандомная (собирается в многопотоке).
Пока у меня в циклах создаются списки, что некошерно и вероятность ошибок большая...
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 600
Баллы
113
C#:
string[][] arr = project.Variables["text"].Value.Split(new String[]{"\r", "\n"}, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Split(new String[] {"   "}, StringSplitOptions.None)).ToArray();

string part1 = string.Join(",", arr.Select(x => x[0]).Distinct());
string part2 = string.Join(",", arr.GroupBy(x => x[1]).Select(x => string.Format("['{0}',{1}]", x.Key, string.Join(",", x.Select( y => y[2])))));

return string.Format("[{0}],{1}", part1, part2);
 
  • Спасибо
Реакции: Nike59 и Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 340
Баллы
113
C#:
string[][] arr = project.Variables["text"].Value.Split(new String[]{"\r", "\n"}, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Split(new String[] {"   "}, StringSplitOptions.None)).ToArray();

string part1 = string.Join(",", arr.Select(x => x[0]).Distinct());
string part2 = string.Join(",", arr.GroupBy(x => x[1]).Select(x => string.Format("['{0}',{1}]", x.Key, string.Join(",", x.Select( y => y[2])))));

return string.Format("[{0}],{1}", part1, part2);
Спасибо, скоро проверю.
Извиняюсь, что ввел в заблуждение примером таблички. На самом деле, это обычная таблица, например из БД или Эксель.
Все эти пробелы и переносы строк я просто для демонстрации структуры таблицы добавил.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 340
Баллы
113
Отличная работа @doc . В боевых условиях, при реальной выборке из БД, всё пашет.
Двухмерные массивы совместно с многоуровневыми лямбдами вне моего понимания)
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 600
Баллы
113
C#:
var table = project.Tables["Таблица 1"];
List<string[]> list = new List<string[]>();

for (int i=0; i<table.RowCount; i++)
    list.Add(table.GetRow(i).ToArray());
    
string part1 = string.Join(",", list.Select(x => x[0]).Distinct());
string part2 = string.Join(",", list.GroupBy(x => x[1]).Select(x => string.Format("['{0}',{1}]", x.Key, string.Join(",", x.Select( y => y[2])))));

return string.Format("[{0}],{1}", part1, part2);
 
  • Спасибо
Реакции: Andrew Shell и Astraport

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 600
Баллы
113
Отличная работа @doc . В боевых условиях, при реальной выборке из БД, всё пашет.
Двухмерные массивы совместно с многоуровневыми лямбдами вне моего понимания)
это был массив массивов)
 
  • Спасибо
Реакции: Andrew Shell и Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 340
Баллы
113
это был массив массивов)
В actionscript такие назывались двухмерными, а вообще они многомерными могут быть string[][][][][][] arr, но чтобы такими оперировать надо быть не от мира сего)
 
  • Спасибо
Реакции: doc

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