在字典中拆分键值

时间:2013-02-13 06:45:30

标签: c# split idictionary oledbdatareader

我在字典中有几个键(代表主题),并且每个键关联几个值(代码)。

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);
                }
            }

所以这是结果

enter image description here

我遇到的问题是这些键中的一些键是由半冒号分隔的(因此每个键有几个项目)所以我必须自然地进行拆分。

例如: 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沟通,提问技巧,决策

所以我想要实现的是为通信存储的所有代码,以及与提问技巧等相同的代码,但当然只有一次。

2 个答案:

答案 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);
    }
 }
}