我在字典中有几个键(代表主题),并且每个键关联几个值(代码)。
CODE SUBJECT
7DIM-039通讯
7DIM-040通讯
7DIM-041通讯
7DIM-042通讯
7DIM-043通讯
为了将eache主题(键)与几个值(代码)相关联,我在查询中执行此操作。我创建了一个字典
Dictionary<string, List<string>> dict = new Dictionary<string,List<string>>();
while (dbReader.Read())
{
string code = (string)dbReader["CODE"];
string subject = (string)dbReader["SUBJECT"];
if (!dict.ContainsKey(subject))
{
dict.Add(subject, new List<string> { code });
}
else
{
dict[subject].Add(code);
}
}
所以这是结果
我遇到的问题是这些键中的一些键是由半冒号分隔的(因此每个键有几个项目)所以我必须自然地进行拆分。
例如: GenSubject;职业;听力技巧;个人发展;提问技巧;教练/指导等。
如何拆分这些值并仍然确保各个代码值与每个拆分值相关联?
foreach(var kvp in dict)
{
foreach (var s in kvp.Key)
{
//splitting the subject keys?
}
}
我还设计了一种拆分方法
static string[] SplitStringAt(string splitItem, char character)
{
return splitItem.Split(character);
}
这是一个例子 CODE GenSubject
7DIM-062沟通,提问技巧,决策
7DIM-063沟通,提问技巧,决策
7DIM-064沟通,提问技巧,决策
7DIM-065沟通,提问技巧,决策
7DIM-066沟通,提问技巧,决策
7DIM-067沟通,提问技巧,决策
所以我想要实现的是为通信存储的所有代码,以及与提问技巧等相同的代码,但当然只有一次。
答案 0 :(得分:1)
试试这个......
foreach (KeyValuePair<string, List<string>> kvp in dic)
{
if (kvp.Key.Contains(";"))
{
var lst = kvp.Value;
foreach (string subKey in kvp.Key.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries))
{
dic[subKey] = lst;
}
}
}
subKey
都必须是唯一的!答案 1 :(得分:1)
很抱歉,您的问题包含一些我不理解的部分:您指的是键和分号,但后面举例说明以逗号分隔的主题。
我会假设你的主题用逗号分隔。
如果您想在阅读时正确分配您的主题,请将subject
拆分并将每个单独项目分配给字典,就像之前对整个主题一样。
Dictionary<string, List<string>> dict = new Dictionary<string,List<string>>();
while (dbReader.Read())
{
string code = (string)dbReader["CODE"];
string subject = (string)dbReader["SUBJECT"];
foreach (string singleSubject in subject.Split(','))
{
if (!dict.ContainsKey(singleSubject))
{
dict.Add(subject, new List<string> { code });
}
else
{
dict[subject].Add(code);
}
}
}