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

  • Автор темы Автор темы arbplv
  • Дата начала Дата начала

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]

По хорошему бы сделать эти списки в цикле, и потом уже работать с ними...
спасибо)
 
Пример данных
данные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
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
Если я все правильно понял, то нужно разбить данные по ключам "тест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
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
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>(); , этот метод подойдет? зенки под рукой сейчас нет, чекнуть это
Спс
 
Если я все правильно понял, то нужно разбить данные по ключам "тест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);
}
Ага, тоже прикольный вариант, через словарик это все сделать
Спасибо
 
По всей видимости мне этот StreamWriter и нужен был, мне не обязательны глобальные списки, мне достаточно локальных в кубике С#, т.к. я собираю, потом отправляю данные пост запросом, потом опять собираю, не выходя из кубика... Если я хочу вот такие листы использовать List <string> name_1 = new List <string>(); , этот метод подойдет? зенки под рукой сейчас нет, чекнуть это
Спс
Можно List<string>
 
  • Спасибо
Реакции: arbplv
Если я все правильно понял, то нужно разбить данные по ключам "тест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);
}
чет не знал что можно в словарик значением сделать целый список, точнее знал что так бывает, но не думал что можно так прям явно задавать это...
 

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