Как преобразовать список в словарь в C # с помощью linq?

#c# #linq

#c# #linq

Вопрос:

У меня есть данные, подобные приведенным ниже

         var listOfForm= new List<FormType>()
        {
                new FormType() {  Page = 1, Type = "FORM-K4"},
                new FormType() {  Page = 2, Type = "OTHER-FORM"},
                new FormType() {  Page = 3, Type = "OTHER-FORM"},
                new FormType() {  Page = 4, Type = "FORM-K5"},
                new FormType() {  Page = 5, Type = "OTHER-FORM"},
                new FormType() {  Page = 6, Type = "OTHER-FORM"},
                new FormType() {  Page = 7, Type = "OTHER-FORM"},
                new FormType() {  Page = 8, Type = "FORM-K6"},
                new FormType() {  Page = 9, Type = "OTHER_FORM"},
                new FormType() {  Page = 10, Type = "FORM-K7"},
                new FormType() {  Page = 11, Type = "FORM-K7"},
                new FormType() {  Page = 12, Type = "OTHER_FORM"},
        };
  

Я хочу создать словарь. Я хочу добавить эти две ДРУГИЕ ФОРМЫ после FORM-K4 в словарь, где ключом является FORM-K4, а остальная часть списка получила тот же шаблон, добавив ДРУГУЮ ФОРМУ к типу / ключу, который был обнаружен ранее.

например, после формы-k5 есть три другие формы, поэтому я хочу добавить каждую страницу из этих других форм в ключ формы-k5.

 var dictForm = dictionary<Type, List<Page>>
  

итак, когда я обращаюсь к dictForm.key form-k5, он возвращает значение 4,5,6,7, а когда ключом является form-k4, значение равно 1,2,3.

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос, чтобы показать ожидаемый результат в коде.

2. очень трудно понять, чего вы хотите.

Ответ №1:

Вы можете создать свой собственный метод расширения для преобразования данных в словарь, поскольку для этого существуют пользовательские правила.

Код

 public static class EnumerableExtensions
{
    public static Dictionary<string, List<int>> ToDictionary(this IEnumerable<FormType> formTypes)
    {
        Dictionary<string, List<int>> output = new Dictionary<string, List<int>>();
        string currentType = string.Empty;

        foreach (var formType in formTypes)
        {
            if (formType.Type.StartsWith("FORM") amp;amp; formType.Type != currentType)
            {
                currentType = formType.Type;

                if (!output.ContainsKey(currentType))
                {
                    output.Add(currentType, new List<int>());
                }
            }

            
            output[currentType].Add(formType.Page);
        }

        return output;
    }
}
  

Использование

 Dictionary<string, List<int>> output = listOfForm
    .ToDictionary();
  

Выходной сигнал

 FORM-K4 : 1, 2, 3
FORM-K5 : 4, 5, 6, 7
FORM-K6 : 8, 9
FORM-K7 : 10, 11, 12