разделение строк некоторым текстом в списке - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть ListBox, где имена таблиц пишутся так:

Staging_Section_01_2019_03_19_01  
Staging_Section_01_2019_03_20_01  
Staging_Section_23_2019_03_21_01  
Staging_Section_52_2019_03_23_01  
Staging_Section_52_2019_03_24_01  

Я пытаюсь разделить их по номеру раздела, поэтому я хочу, чтобы все Section_01 в одном List объекте и Section_23 в другом List объекте, и так далее, и так далее. Динамичная природа делает меня трудным.

Пока у меня есть следующее:

foreach (var it in uploadBox.Items)
{
    if (it.ToString().Contains("Section"))
    {
        section = it.ToString().Substring(0, 18);
        found = it.ToString().IndexOf("_");
        section = section.Substring(found + 1);
        sectionNum = section.Substring(8, 2);
    }
}

Я получил sectionNum, который будет просто номером и разделом, который является строкой типа Section_01.

Есть идеи, как к этому подойти?

Ожидаемый результат будет примерно таким:

Список 1

Staging_Section_01_2019_03_19_01  
Staging_Section_01_2019_03_20_01  

Список 2

Staging_Section_23_2019_03_21_01  

Список 3

Staging_Section_52_2019_03_23_01  
Staging_Section_52_2019_03_24_01  

Ответы [ 3 ]

1 голос
/ 10 апреля 2019

Я бы использовал Dictionary<string, List<string>> для этого.Каждый анализируемый раздел будет ключом, а оставшаяся часть будет иметь значение.

Dictionary<string, List<string>> myDict = new Dictionary<string, List<string>>();
foreach (var it in uploadBox.Items)
{
    if (it.ToString().Contains("Section"))
    {
        section = it.ToString().Substring(0, 18);
        found = it.ToString().IndexOf("_");
        section = section.Substring(found + 1);
        sectionNum = section.Substring(8, 2);

        if(!myDict.ContainsKey(sectionNum))
        {
            myDict.Add(sectionNum, new List<string> { someOtherValue });
        }
        else
        {
            myDict[sectionNum].Add(someOtherValue);
        }
    }
}

Если я не полностью неверно истолковал ваш вопрос, я думаю, что это потенциальное решение для ваших динамических объектов.

0 голосов
/ 10 апреля 2019

Лучше всего регулярное выражение для такого рода задач:

uploadBox.Items
    .GroupBy(x => Regex.Match(x.ToString(), @"^\w+_Section_(?<section>\d+)").Groups["section"].Value)
0 голосов
/ 10 апреля 2019

вы могли бы сделать что-то вроде этого:

var sections = new Dictionary<string, List<string>>();

foreach(var it in uploadBox.Items)
{
    var item = it.ToString();

    if(item.Contains("Section"))
    {

        var section = GetSection(item);

        if(!sections.ContainsKey(section))
        {
            sections.Add(section, new List<string>());            
        } 

        sections[section].Add(item);
    }    
}

private string GetSection(string item)
{
    var split = item.Split("_");
    return $"{split[1]}_{split[2]}";    
}
...