通过列表框中的某些文本分隔字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过列表框中的某些文本分隔字符串相关的知识,希望对你有一定的参考价值。
我有一个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
的字符串。
有关如何处理此问题的任何想法?
预期的输出将是这样的:
List 1
Staging_Section_01_2019_03_19_01
Staging_Section_01_2019_03_20_01
List 2
Staging_Section_23_2019_03_21_01
List 3
Staging_Section_52_2019_03_23_01
Staging_Section_52_2019_03_24_01
答案
我会用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);
}
}
}
除非我完全误解了你的问题,否则我认为这是动态对象的潜在解决方案。
另一答案
你可以这样做:
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]}";
}
另一答案
这种任务最好是正则表达式:
uploadBox.Items
.GroupBy(x => Regex.Match(x.ToString(), @"^w+_Section_(?<section>d+)").Groups["section"].Value)
以上是关于通过列表框中的某些文本分隔字符串的主要内容,如果未能解决你的问题,请参考以下文章