Объединение списков — фундаментальная операция в программировании на C#. В этой статье рассматривается несколько эффективных методов объединения списков, каждый со своими преимуществами и случаями использования. Мы рассмотрим различные подходы, от простого конкатенирования до более сложных операций, таких как слияние с удалением дубликатов или объединение элементов парами.
Оглавление
- Объединение списков с помощью
AddRange()
- Конкатенация списков с помощью
Concat()
(LINQ) - Ручное объединение списков с помощью цикла
foreach
- Объединение списков и удаление дубликатов с помощью
Union()
(LINQ) - Вставка списка в другой с помощью
InsertRange()
- Объединение элементов парами с помощью метода
Zip()
- Заключение
Объединение списков с помощью AddRange()
Метод AddRange()
предлагает прямой и эффективный способ добавления одного списка в конец другого. Этот метод изменяет исходный список.
using System;
using System.Collections.Generic;
public class JoinLists
{
public static void Main(string[] args)
{
List<int> list1 = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int> { 4, 5, 6 };
list1.AddRange(list2);
Console.WriteLine("Объединённый список:");
Console.WriteLine(string.Join(" ", list1)); // Output: 1 2 3 4 5 6
}
}
Конкатенация списков с помощью Concat()
(LINQ)
Метод Concat()
из LINQ обеспечивает подход к конкатенации списков только для чтения. Он создаёт новый список, содержащий все элементы из обоих входных списков, не изменяя исходные.
using System;
using System.Collections.Generic;
using System.Linq;
public class JoinLists
{
public static void Main(string[] args)
{
List<int> list1 = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int> { 4, 5, 6 };
var joinedList = list1.Concat(list2).ToList();
Console.WriteLine("Объединённый список:");
Console.WriteLine(string.Join(" ", joinedList)); // Output: 1 2 3 4 5 6
}
}
Ручное объединение списков с помощью цикла foreach
Ручной подход с использованием цикла foreach
обеспечивает максимальный контроль, что особенно полезно при работе с более сложной логикой объединения.
using System;
using System.Collections.Generic;
public class JoinLists
{
public static void Main(string[] args)
{
List<int> list1 = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int> { 4, 5, 6 };
List<int> joinedList = new List<int>();
joinedList.AddRange(list1);
foreach (int num in list2)
{
joinedList.Add(num);
}
Console.WriteLine("Объединённый список:");
Console.WriteLine(string.Join(" ", joinedList)); // Output: 1 2 3 4 5 6
}
}
Объединение списков и удаление дубликатов с помощью Union()
(LINQ)
Метод Union()
эффективно объединяет два списка, удаляя дубликаты.
using System;
using System.Collections.Generic;
using System.Linq;
public class JoinLists
{
public static void Main(string[] args)
{
List<int> list1 = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int> { 3, 4, 5 };
var joinedList = list1.Union(list2).ToList();
Console.WriteLine("Объединённый список (дубликаты удалены):");
Console.WriteLine(string.Join(" ", joinedList)); // Output: 1 2 3 4 5
}
}
Вставка списка в другой с помощью InsertRange()
InsertRange()
позволяет точно вставлять один список в другой по указанному индексу.
using System;
using System.Collections.Generic;
public class JoinLists
{
public static void Main(string[] args)
{
List<int> list1 = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int> { 4, 5, 6 };
list1.InsertRange(2, list2); // Вставляет list2 начиная с индекса 2
Console.WriteLine("Объединённый список:");
Console.WriteLine(string.Join(" ", list1)); // Output: 1 2 4 5 6 3
}
}
Объединение элементов парами с помощью метода Zip()
Метод Zip()
объединяет соответствующие элементы из двух списков на основе их индекса. Это полезно, когда нужно объединить элементы, имеющие взаимную связь.
using System;
using System.Collections.Generic;
using System.Linq;
public class JoinLists
{
public static void Main(string[] args)
{
List<string> list1 = new List<string> { "A", "B", "C" };
List<int> list2 = new List<int> { 1, 2, 3 };
var zippedList = list1.Zip(list2, (str, num) => str + num).ToList();
Console.WriteLine("Список пар:");
Console.WriteLine(string.Join(" ", zippedList)); // Output: A1 B2 C3
}
}
Заключение
C# предлагает богатый набор инструментов для работы со списками. Выбор метода во многом зависит от конкретных требований вашей задачи. При выборе наиболее подходящего подхода учитывайте, нужно ли изменять исходные списки, удалять дубликаты или объединять соответствующие элементы.