用列表框内的某些文本分隔字符串

时间:2019-04-10 19:46:42

标签: c# list listbox

我有一个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 个答案:

答案 0 :(得分:1)

为此,我将使用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);
        }
    }
}

除非我完全误解了您的问题,否则我认为这是对动态对象的一种潜在解决方案。

答案 1 :(得分:0)

您可以执行以下操作:

import numpy as np 
import matplotlib.pyplot as plt

#generate some random data
data = np.random.randn(200)

#plot
box = plt.boxplot(data)
# change the color of its elements
for _, line_list in box.items():
    for line in line_list:
        line.set_color('k')

plt.show()

答案 2 :(得分:0)

对于此类任务,最好使用正则表达式:

uploadBox.Items
    .GroupBy(x => Regex.Match(x.ToString(), @"^\w+_Section_(?<section>\d+)").Groups["section"].Value)