0

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

代码主题

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?
            }
        }

我还设计了一种拆分方法

static string[] SplitStringAt(string splitItem, char character)
    {
        return splitItem.Split(character);
    }

这是一个示例代码 GenSubject

7DIM-062 沟通、提问技巧、决策

7DIM-063 沟通、提问技巧、决策

7DIM-064 沟通、提问技巧、决策

7DIM-065 沟通、提问技巧、决策

7DIM-066 沟通、提问技巧、决策

7DIM-067 沟通、提问技巧、决策

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

4

2 回答 2

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必须是独一无二的!

于 2013-02-13T06:56:13.420 回答
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);
    }
 }
}
于 2013-02-13T07:10:14.263 回答