Преобразование C# LINQ в словарь

Preobrazovanie C Linq V Slovar



В C# LINQ создание словаря из System.Collections.Generic.IEnumerable можно с помощью метода ToDictionary(). Этот метод создает словарь с из заданного . System.ArgumentNullException вызывается, если источник данных, keySelector или elementSelector имеет значение null. Кроме того, если keySelector создает дубликаты ключей для двух элементов, System.ArgumentException бросается. В этом руководстве мы обсудим, как создать словарь из источника данных списка, перегрузив два метода.

Синтаксис:

1. Если вы хотите создать словарь в соответствии с указанными функциями селектора клавиш и селектора элементов из заданного источника данных, перегрузите следующий метод:









Параметры:



    1. источник : Источником может быть IEnumerable (список), в котором словарь создается из этого источника.
    2. ключселектор : это функция, которая используется для получения ключа от каждого элемента.
    3. элементселектор: Это функция, которая используется для получения элемента.
    4. источник : это параметр типа, указывающий тип источника данных.
    5. TKey: Это параметр типа, который определяет тип ключа.
    6. ТЕЭлемент : это параметр типа, указывающий тип элемента.

2. Если вы хотите создать словарь в соответствии с указанной функцией выбора ключа из заданного источника данных, перегрузите следующий метод:





Параметры:



    1. источник : Источником может быть IEnumerable (список), в котором словарь создается из этого источника.
    2. ключселектор : это функция, которая используется для получения ключа от каждого элемента.
    3. Источник: Это относится к типу источника данных.
    4. ТКей : указывает тип ключа.

Пример 1: указанный ключевой селектор и функция выбора элемента

Создайте список типа «Учетная запись», который содержит четыре атрибута (Acc_ID, Acc_Name, Industry, Revenue) с пятью записями.

1. Создайте словарь из предыдущего списка с ключом в качестве Acc_ID и значением в качестве Acc_Name.
2. Создайте словарь из предыдущего списка с ключом Acc_Name и значением Revenue.

с использованием Система ;
с использованием System.Linq ;
с использованием System.Collections.Generic ;

сорт Информация Об Учетной Записи
{
публичный статический пустота Основной ( )
{
// Создать Список типа - Счет.
Детали списка '=' новый Список ( ) ;
// Добавляем 5 записей в список.
подробности . Добавлять ( новый Счет { Acc_ID '=' 1 , Acc_Name '=' 'Линукс' , Промышленность '=' 'Образование' ,Доход '=' 2500 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 2 , Acc_Name '=' 'Питон' , Промышленность '=' 'Учебный лагерь' ,Доход '=' 10000 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 3 , Acc_Name '=' 'Джава' , Промышленность '=' 'Образование' ,Доход '=' 500 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 4 , Acc_Name '=' '.СЕТЬ' , Промышленность '=' 'Обучение' ,Доход '=' 2080 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 5 , Acc_Name '=' 'Оракул' , Промышленность '=' 'Работа' ,Доход '=' 2090 } ) ;

// Создать словарь из приведенного выше списка с ключом в качестве Acc_ID и значением в качестве Acc_Name
Консоль . WriteLine ( ' ----Ключ как Acc_ID и значение как Acc_Name----' ) ;
Словарь account_dict1 '=' подробности . ToDictionary ( Дж => Дж . Acc_ID , Дж => Дж . Acc_Name ) ;

для каждого ( KeyValuePair i в account_dict1 )
{
Консоль . WriteLine ( 'Идентификатор учетной записи:' + я . Ключ + ' Имя учетной записи :' + я . Ценить ) ;
}

// Создать словарь из приведенного выше списка с ключом в качестве Acc_Name и значением в качестве дохода
Консоль . WriteLine ( ' ----Key как Acc_Name и Value как Revenue----' ) ;
Словарь account_dict2 '=' подробности . ToDictionary ( л => л . Acc_Name , л => л . Доход ) ;

для каждого ( KeyValuePair k в account_dict2 )
{
Консоль . WriteLine ( 'Имя учетной записи :' + к . Ключ + 'Аккаунт-Доход:' + к . Ценить ) ;
}

}
}

// Создаем класс с именем - Аккаунт с четырьмя атрибутами
публичный сорт Счет
{
публичный инт Acc_ID { получать ; набор ; }
публичный нить Acc_Name { получать ; набор ; }
публичный нить Промышленность { получать ; набор ; }
публичный инт Доход { получать ; набор ; }
}

Выход:

Объяснение:

1. Создайте класс с именем «Учетная запись» с четырьмя атрибутами.

2. В основном классе создайте список типа «Счет» и вставьте в него пять записей.

3. Создайте словарь из предыдущего списка с ключом в качестве Acc_ID и значением в качестве Acc_Name. Здесь мы указываем TKey как int и TElement как строку. Внутри метода ToDictionary() мы передаем Acc_ID в keySelector и Acc_Name в elementSelector. Наконец, мы используем цикл foreach для итерации словаря и возврата ключей и значений с использованием свойств ключа и значения.

4. Создайте словарь из предыдущего списка с ключом Acc_Name и значением Revenue. Здесь мы указываем TKey как строку и TElement как целое число. Внутри метода ToDictionary() мы передаем Acc_Name в keySelector и Revenue в elementSelector. Наконец, мы используем цикл foreach для итерации словаря и возврата ключей и значений с использованием свойств ключа и значения.

Пример 2: Выбор указанного ключа

Используйте предыдущий код и создайте словарь из предыдущего списка с ключом Acc_ID.

с использованием Система ;
с использованием System.Linq ;
с использованием System.Collections.Generic ;

сорт Информация Об Учетной Записи
{
публичный статический пустота Основной ( )
{
// Создать Список типа - Счет.
Детали списка '=' новый Список ( ) ;
// Добавляем 5 записей в список.
подробности . Добавлять ( новый Счет { Acc_ID '=' 1 , Acc_Name '=' 'Линукс' , Промышленность '=' 'Образование' ,Доход '=' 2500 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 2 , Acc_Name '=' 'Питон' , Промышленность '=' 'Учебный лагерь' ,Доход '=' 10000 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 3 , Acc_Name '=' 'Джава' , Промышленность '=' 'Образование' ,Доход '=' 500 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 4 , Acc_Name '=' '.СЕТЬ' , Промышленность '=' 'Обучение' ,Доход '=' 2080 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 5 , Acc_Name '=' 'Оракул' , Промышленность '=' 'Работа' ,Доход '=' 2090 } ) ;

// Создать словарь из приведенного выше списка с ключом в качестве Acc_ID.
Словарь account_dict '=' подробности . ToDictionary ( Дж => Дж . Acc_ID ) ;
для каждого ( KeyValuePair i в account_dict )
{
Консоль . WriteLine ( 'Ключ:' + я . Ключ + '--> Имя учетной записи:' + я . Ценить . Acc_Name
+ 'Аккаунт-Индустрия:' + я . Ценить . Промышленность
+ 'Аккаунт-Доход:' + я . Ценить . Доход ) ;
}

}
}

// Создаем класс с именем - Аккаунт с четырьмя атрибутами
публичный сорт Счет
{
публичный инт Acc_ID { получать ; набор ; }
публичный нить Acc_Name { получать ; набор ; }
публичный нить Промышленность { получать ; набор ; }
публичный инт Доход { получать ; набор ; }
}

Выход:

Объяснение:

Здесь мы создаем словарь с ключом Acc_ID. Это действует как ключ для каждой записи в словаре, который мы создали из списка. После этого мы используем цикл foreach для получения ключей и значений (с атрибутами), используя свойства ключа и значения.

Пример 3: Дублирующиеся ключи — ArgumentException

Создайте список с двумя записями и попытайтесь преобразовать его в словарь с Acc_ID в качестве ключа.

с использованием Система ;
с использованием System.Linq ;
с использованием System.Collections.Generic ;

сорт Информация Об Учетной Записи
{
публичный статический пустота Основной ( )
{
// Создать Список типа - Счет.
Детали списка '=' новый Список ( ) ;
// Добавляем 2 записи в список.
подробности . Добавлять ( новый Счет { Acc_ID '=' 1 , Acc_Name '=' 'Линукс' , Промышленность '=' 'Образование' ,Доход '=' 2500 } ) ;
подробности . Добавлять ( новый Счет { Acc_ID '=' 1 , Acc_Name '=' 'Питон' , Промышленность '=' 'Учебный лагерь' ,Доход '=' 10000 } ) ;

// Попробуйте создать словарь из приведенного выше списка с ключом в качестве Acc_ID.
Словарь account_dict '=' подробности . ToDictionary ( Дж => Дж . Acc_ID ) ;

}
}

// Создаем класс с именем - Аккаунт с четырьмя атрибутами
публичный сорт Счет
{
публичный инт Acc_ID { получать ; набор ; }
публичный нить Acc_Name { получать ; набор ; }
публичный нить Промышленность { получать ; набор ; }
публичный инт Доход { получать ; набор ; }
}

Исключение:

Возникает необработанное исключение System.ArgumentException, поскольку ключ дублируется (1) в обоих идентификаторах Acc_ID.

Пример 4: Нулевой источник — ArgumentNullException

Создайте список с типом «Учетная запись» и присвойте ему значение null. Попробуйте создать словарь из предыдущего списка с ключом Acc_ID.

с использованием Система ;
с использованием System.Linq ;
с использованием System.Collections.Generic ;

сорт Информация Об Учетной Записи
{
публичный статический пустота Основной ( )
{
// Создаем список типа - Account и присваиваем ему значение null.
Детали списка '=' нулевой ;

// Попробуйте создать словарь из приведенного выше списка с ключом в качестве Acc_ID.
Словарь account_dict '=' подробности . ToDictionary ( Дж => Дж . Acc_ID ) ;

}
}

// Создаем класс с именем - Аккаунт с четырьмя атрибутами
публичный сорт Счет
{
публичный инт Acc_ID { получать ; набор ; }
публичный нить Acc_Name { получать ; набор ; }
публичный нить Промышленность { получать ; набор ; }
публичный инт Доход { получать ; набор ; }
}

Исключение:

Возникает необработанное исключение System.ArgumentNullException, поскольку список имеет значение null.

Заключение

Мы научились создавать словарь из IEnumerable (здесь это список) с помощью метода ToDictionary() в C# LINQ. Этот метод можно перегрузить двумя способами. Мы обсудили оба метода с примерами. Кроме того, мы узнали о двух исключительных случаях, которые вызывает этот метод, когда источник данных/keySelector/elementSelector имеет значение null, а ключи дублируются.