我在字典中有几个键(代表主题),并将每个键关联几个值(代码)。
代码主题
7DIM-039通信
7DIM-040通信
7DIM-041通信
7DIM-042通信
7DIM-043通信
为了将每个主题(键)与几个值(代码)相关联,我在查询中这样做。我创建了一本字典
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?
}
}
我还设计了一个split方法
static string[] SplitStringAt(string splitItem, char character)
{
return splitItem.Split(character);
}
这是一个示例代码GenSubject
7DIM-062沟通,提问技巧,决策
7DIM-063沟通,提问技巧,决策
7DIM-064沟通、提问技巧、决策
7DIM-065沟通、提问技能、决策
7DIM-066沟通、提问技能、决策
7DIM-067沟通、提问技能、决策
所以我想要实现的是所有的代码都被存储起来用于交流,同样的代码用于提问技能等,但当然只有一次。
发布于 2013-02-13 14:56:13
试试这个。
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
都需要是唯一的!
发布于 2013-02-13 15:10:14
很抱歉,您的问题包含一些我不理解的部分:您引用的是键和分号,但随后给出了一个以逗号分隔的主题的示例。
我假设你有用逗号分隔的主语。
如果你想在阅读时正确地分配你的主题,拆分你的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);
}
}
}
https://stackoverflow.com/questions/14847963
复制相似问题