Разделение ключевых значений в словаре

У меня есть несколько ключей (которые представляют предметы) в словаре, и с этим я связываю несколько значений (кодов) для каждого ключа.

КОД ТЕМА

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

Это пример CODE GenSubject

7DIM-062 Коммуникация, умение задавать вопросы, принятие решений

7DIM-063 Коммуникация, умение задавать вопросы, принятие решений

7DIM-064 Коммуникация, умение задавать вопросы, принятие решений

7DIM-065 Коммуникация, умение задавать вопросы, принятие решений

7DIM-066 Коммуникация, умение задавать вопросы, принятие решений

7DIM-067 Коммуникация, умение задавать вопросы, принятие решений

так что я хочу добиться, чтобы все коды были «сохранены для общения» и те же коды для навыков постановки вопросов и т. д., но, конечно, только один раз.


person Arianule    schedule 13.02.2013    source источник
comment
Можете ли вы привести пример ключа, содержащего несколько значений, и значение, которое вы хотите сохранить?   -  person drhanlau    schedule 13.02.2013
comment
Вы хотите разделить ключи перед вставкой кода/темы в свой dict, или вы хотите разделить их только при выводе?   -  person siger    schedule 13.02.2013
comment
для каждого разделенного ключа один и тот же список связан со всеми?   -  person Parimal Raj    schedule 13.02.2013
comment
Да, для каждого разделенного ключа должен быть связан один и тот же список значений.   -  person Arianule    schedule 13.02.2013


Ответы (2)


Попробуй это...

        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 должны быть уникальными!

person Parimal Raj    schedule 13.02.2013

Извините, ваш вопрос содержит некоторые части, которые я не понимаю: вы имеете в виду ключи и точку с запятой, но затем приводите пример с темами, разделенными запятой.

Я предполагаю, что у вас есть предметы, разделенные запятой.

Если вы хотите правильно назначать предметы во время чтения, разделите 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);
    }
 }
}
person alzaimar    schedule 13.02.2013