Создать списки циклом и добавить строки в каждый список через цикл с#

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Задача стоит распарсить большой список на несколько маленьких, так сказать группировка по определенным критериям...
Сперва я создаю список уникальных значений, потом бы мне надо создать под каждое уникальное свой список, и положить туда значения которые соответствуют этому уникальному значению.
Пример данных
данные1&тест1&данные4
данные2&тест2&данные5
данные3&тест1&данные6
Надо создать 2 списка и положить туда значения:
список 1 = [данные1&тест1&данные4, данные3&тест1&данные6]
список 2 = [данные3&тест1&данные6]

По хорошему бы сделать эти списки в цикле, и потом уже работать с ними...
спасибо)
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
Пример данных
данные1&тест1&данные4
данные2&тест2&данные5
данные3&тест1&данные6
Надо создать 2 списка и положить туда значения:
список 1 = [данные1&тест1&данные4, данные3&тест1&данные6]
список 2 = [данные3&тест1&данные6]
в примере в двух списках [данные3&тест1&данные6]. по каким параметрам одинаковые строки в разные списки записывать?
 
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
C#:
list_info = {"data1&test1&data2", "data1&test2&data3", "data1&test1&data4"};
foreach(string inf in list_info){
    if (!uniq_list.contains(inf.Split('&')[1])){
        uniq_list.add(inf.Split('&')[1])
    }
}
//Получили список уникальных значений, в данным случае их 2. {"test1", "test2"}
//Теперь мне надо бы как нидт сделать 2 списка, т.к. значения у меня 2
//Как то в цикле их сделали (почему в цикле, потомусто может быть и 10, а может быть 2)
//Теперь у нас есть 2 листа, list_test_1 и list_test_2
// Нужно теперь раскидать эти переменные по этим 2 листам
// Что то похожее, только надо понимать сколько элементов в списке и сколько списков...
foreach(string el in list_info){
    string find_el = el.Split('&')[1]
    if (find_el == uniq_list[0]) list_test_1.Add(el)
    else if (find_el == uniq_list[1]) list_test_2.Add(el)
    else ... так далее...
}
//можно конечно 2 условия писать, типа в uniq_list[n] есть значение и find_el == uniq_list[n]
Писал без проверок, логика думаю будет понятна...
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
написал поподробнее выше
Есть большой список
В Большом списке строки. каждая строка имеет разделитель (&)
Нужно пройтись по каждой строке,
разбить ее в массив по разделитель (&) и по одному из значений создать список и закинуть туда всю строку
???
 
  • Спасибо
Реакции: arbplv

Carty

Client
Регистрация
16.06.2021
Сообщения
39
Благодарностей
66
Баллы
18
Если я все правильно понял, то нужно разбить данные по ключам "тест1", "тест2" в отдельные списки:
C#:
var lists = new Dictionary<string, List<string>>();

var data = new List<string>() { "данные1&тест1&данные4", "данные2&тест2&данные5", "данные3&тест1&данные6" };

foreach (var d in data)
{
    var key = d.Split('&')[1].Split('&')[0];
    if(!lists.ContainsKey(key))
    {
        lists.Add(key, new List<string>());
    }
    lists[key].Add(d);
}
 
  • Спасибо
Реакции: DevOps и arbplv

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
C#:
var bigList = project.Lists["bigList"]; //большой список с названием bigList

string listBase = project.Directory+@"\listBase\";//директория для списков
if(!Directory.Exists(listBase))//если нет папки для списков
{
    Directory.CreateDirectory(listBase);//создаем папку для списков
}

foreach(string row in bigList)
{
    //разбиваем строку из bigList в массив
    string[] rowArr = row.Split('&');
    //если в массиве такая строка - данные3&тест1&данные6
    //то создаст список с названием данные3 и закинет дуда всю строку
    //метод StreamWriter создаст список и запишет строку   
    using (StreamWriter writer = new StreamWriter(listBase+rowArr[0]+".txt", true))
    {     
        writer.WriteLine(row);               
    }
}
 
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
C#:
var bigList = project.Lists["bigList"]; //большой список с названием bigList

string listBase = project.Directory+@"\listBase\";//директория для списков
if(!Directory.Exists(listBase))//если нет папки для списков
{
    Directory.CreateDirectory(listBase);//создаем папку для списков
}

foreach(string row in bigList)
{
    //разбиваем строку из bigList в массив
    string[] rowArr = row.Split('&');
    //если в массиве такая строка - данные3&тест1&данные6
    //то создаст список с названием данные3 и закинет дуда всю строку
    //метод StreamWriter создаст список и запишет строку  
    using (StreamWriter writer = new StreamWriter(listBase+rowArr[0]+".txt", true))
    {    
        writer.WriteLine(row);              
    }
}
По всей видимости мне этот StreamWriter и нужен был, мне не обязательны глобальные списки, мне достаточно локальных в кубике С#, т.к. я собираю, потом отправляю данные пост запросом, потом опять собираю, не выходя из кубика... Если я хочу вот такие листы использовать List <string> name_1 = new List <string>(); , этот метод подойдет? зенки под рукой сейчас нет, чекнуть это
Спс
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Если я все правильно понял, то нужно разбить данные по ключам "тест1", "тест2" в отдельные списки:
C#:
var lists = new Dictionary<string, List<string>>();

var data = new List<string>() { "данные1&тест1&данные4", "данные2&тест2&данные5", "данные3&тест1&данные6" };

foreach (var d in data)
{
    var key = d.Split('&')[1].Split('&')[0];
    if(!lists.ContainsKey(key))
    {
        lists.Add(key, new List<string>());
    }
    lists[key].Add(d);
}
Ага, тоже прикольный вариант, через словарик это все сделать
Спасибо
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
По всей видимости мне этот StreamWriter и нужен был, мне не обязательны глобальные списки, мне достаточно локальных в кубике С#, т.к. я собираю, потом отправляю данные пост запросом, потом опять собираю, не выходя из кубика... Если я хочу вот такие листы использовать List <string> name_1 = new List <string>(); , этот метод подойдет? зенки под рукой сейчас нет, чекнуть это
Спс
Можно List<string>
 
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Если я все правильно понял, то нужно разбить данные по ключам "тест1", "тест2" в отдельные списки:
C#:
var lists = new Dictionary<string, List<string>>();

var data = new List<string>() { "данные1&тест1&данные4", "данные2&тест2&данные5", "данные3&тест1&данные6" };

foreach (var d in data)
{
    var key = d.Split('&')[1].Split('&')[0];
    if(!lists.ContainsKey(key))
    {
        lists.Add(key, new List<string>());
    }
    lists[key].Add(d);
}
чет не знал что можно в словарик значением сделать целый список, точнее знал что так бывает, но не думал что можно так прям явно задавать это...
 

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