C#/배열

[C#]두 배열을 합치는 방법

DevStory 2022. 9. 14.

두 배열을 합치는 방법

이번 포스팅은 C#에서 두 배열을 연결하여 새로운 배열을 만드는 몇 가지 방법을 소개합니다.


방법 1. 반복문

가장 심플한 방법으로 반복문을 사용할 수 있습니다.

 

[합치는 방법]

순서 1. 두 배열의 길이를 더한 값을 새로운 배열의 크기로 설정하여 새로운 배열을 생성합니다.

순서 2. 첫 번째 배열을 순회하여 새로운 배열에 값을 추가합니다.

순서 3. 두 번째 배열을 순회하여 새로운 배열에 값을 추가합니다.

 

다음 예제는 반복문을 사용하여 두 배열이 합쳐진 새로운 배열을 생성합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray1 = { 0, 10, 20 };
    int[] intArray2 = { 30, 40, 50 };
    int[] newArray = new int[intArray1.Length + intArray2.Length];
    int index = 0;

    foreach(int num in intArray1)
    {
      newArray[index++] = num;
    }

    foreach (int num in intArray2)
    {
      newArray[index++] = num;
    }

    Console.WriteLine("intArray1: " + string.Join(", ", intArray1));
    Console.WriteLine("intArray2: " + string.Join(", ", intArray2));
    Console.WriteLine("newArray: " + string.Join(", ", newArray));
  }
}

[실행 결과]

intArray1: 0, 10, 20
intArray2: 30, 40, 50
newArray: 0, 10, 20, 30, 40, 50

방법 2. Array 클래스의 CopyTo 메서드

두 번째 방법으로 Array 클래스에서 제공하는 CopyTo() 메서드를 사용하여 두 배열을 합칠 수 있습니다.

public void CopyTo(Array array, int index);

첫 번째 매개변수에 새로운 배열을 전달하고 두 번째 매개변수에 값이 추가되는 새로운 배열의 위치를 전달합니다.

 

[합치는 방법]

순서 1. 두 배열의 길이를 더한 값을 새로운 배열의 크기로 설정하여 새로운 배열을 생성합니다.

순서 2. 첫 번째 배열에서 CopyTo() 메서드를 호출하고 첫 번째 매개변수에 새로운 배열을 전달하고 두 번째 매개변수에 0을 전달합니다.

순서 3. 두 번째 배열에서 CopyTo() 메서드를 호출하고 첫 번째 매개변수에 새로운 배열을 전달하고 두 번째 매개변수에 첫 번째 배열의 길이를 전달합니다.

 

다음 예제는 CopyTo() 메서드를 사용하여 두 배열이 합쳐진 새로운 배열을 생성합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray1 = { 0, 10, 20 };
    int[] intArray2 = { 30, 40, 50 };
    int[] newArray = new int[intArray1.Length + intArray2.Length];

    intArray1.CopyTo(newArray, 0);
    intArray2.CopyTo(newArray, intArray1.Length);

    Console.WriteLine("intArray1: " + string.Join(", ", intArray1));
    Console.WriteLine("intArray2: " + string.Join(", ", intArray2));
    Console.WriteLine("newArray: " + string.Join(", ", newArray));
  }
}

[실행 결과]

intArray1: 0, 10, 20
intArray2: 30, 40, 50
newArray: 0, 10, 20, 30, 40, 50

방법 3. Array 클래스의 Resize 메서드와 Copy 메서드

세 번째 방법으로 Array 클래스의 Resize() 메서드와 Copy() 메서드를 사용할 수 있습니다.

 

이 방법은 새로운 배열을 생성하지 않고 기존 배열에 값을 추가합니다.

 

Array 클래스의 Resize() 메서드는 기존 배열의 크기를 변경하는 목적으로 사용됩니다.

public static void Resize<T>([NotNull] ref T[]? array, int newSize);

첫 번째 매개변수에 ref 키워드를 사용하여 기존 배열을 전달하고 두 번째 매개변수에 변경하고자 하는 배열의 크기를 전달합니다.

 

Array 클래스의 Copy() 메서드는 이름 그대로 배열을 복사하는 목적으로 사용됩니다.

public static void Copy(
  Array sourceArray, int sourceIndex,
  Array destinationArray, int destinationIndex, 
  int length);

Array sourceArray

- 원본 배열입니다.

 

int sourceIndex

- 원본 배열의 해당 위치부터 값이 복사됩니다.

 

Array destinationArray

- 원본 배열에서 복사한 데이터가 추가되는 배열입니다.

 

int destinationIndex

- 원본 배열에서 복사한 값이 목적지 배열에 추가되는 위치입니다.

 

int length

- 원본 배열에서 복사되는 데이터 개수입니다.

 

[합치는 방법]

순서 1. Resize() 메서드를 호출하여 기존 배열의 크기를 두 배열의 길이를 더한 값으로 변경합니다.

순서 2. Copy() 메서드를 사용하여 두 번째 배열의 값을 복사합니다.

 

다음 예제는 Resize() 메서드와 Copy() 메서드를 사용하여 기존 배열에 값을 추가합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray1 = { 0, 10, 20 };
    int[] intArray2 = { 30, 40, 50 };

    Array.Resize(ref intArray1, intArray1.Length + intArray2.Length);
    Array.Copy(intArray2, 0, intArray1, intArray1.Length - intArray2.Length, intArray2.Length);

    Console.WriteLine("intArray1: " + string.Join(", ", intArray1));
    Console.WriteLine("intArray2: " + string.Join(", ", intArray2));
  }
}

[실행 결과]

intArray1: 0, 10, 20, 30, 40, 50
intArray2: 30, 40, 50

방법 4. List 클래스의 AddRange 메서드

List의 AddRange() 메서드를 사용하여 두 배열이 합쳐진 새로운 배열을 생성할 수 있습니다.

 

AddRange() 메서드는 List에 배열 또는 컬렉션의 값을 한 번에 추가하기 위한 목적으로 사용됩니다.

public void AddRange(IEnumerable<T> collection);

 

[합치는 방법]

순서 1. List를 생성합니다.

순서 2. AddRange() 메서드를 호출하여 첫 번째 배열을 매개변수에 전달합니다.

순서 3. AddRange() 메서드를 호출하여 두 번째 배열을 매개변수에 전달합니다.

순서 4. List를 배열로 변환합니다.

 

다음 예제는 List 클래스의 AddRange() 메서드를 사용하여 두 배열이 합쳐진 새로운 배열을 생성합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray1 = { 0, 10, 20 };
    int[] intArray2 = { 30, 40, 50 };

    List<int> newList = new List<int>();
    newList.AddRange(intArray1);
    newList.AddRange(intArray2);

    int[] newArray = newList.ToArray();

    Console.WriteLine("intArray1: " + string.Join(", ", intArray1));
    Console.WriteLine("intArray2: " + string.Join(", ", intArray2));
    Console.WriteLine("newArray: " + string.Join(", ", newArray));
  }
}

[실행 결과]

intArray1: 0, 10, 20
intArray2: 30, 40, 50
newArray: 0, 10, 20, 30, 40, 50

방법 5. LINQ의 Concat 메서드

LINQ에서 제공하는 Concat() 메서드를 사용하여 두 배열이 합쳐진 새로운 배열을 생성할 수 있습니다.

 

먼저, LINQ에서 제공하는 기능을 사용하기 위해 다음 네임스페이스를 추가합니다.

using System.Linq;

 

Concat() 메서드는 IEnumerable 인터페이스가 구현된 클래스에서 호출할 수 있으며, 배열 또는 컬렉션과 같은 데이터 집합이 하나로 합쳐진 IEnumerable 객체를 반환합니다.

public static IEnumerable<TSource> Concat<TSource>(
  this IEnumerable<TSource> first, 
  IEnumerable<TSource> second);

 

[합치는 방법]

순서 1. 첫 번째 배열에서 Concat() 메서드를 호출하고 두 번째 배열을 매개변수로 전달합니다.

순서 2. Concat() 메서드의 결과를 ToArray() 메서드를 호출하여 배열로 변환합니다.

 

다음 예제는 Concat() 메서드를 사용하여 두 배열이 합쳐진 새로운 배열을 생성합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray1 = { 0, 10, 20 };
    int[] intArray2 = { 30, 40, 50 };

    int[] newArray = intArray1.Concat(intArray2).ToArray();

    Console.WriteLine("intArray1: " + string.Join(", ", intArray1));
    Console.WriteLine("intArray2: " + string.Join(", ", intArray2));
    Console.WriteLine("newArray: " + string.Join(", ", newArray));
  }
}

[실행 결과]

intArray1: 0, 10, 20
intArray2: 30, 40, 50
newArray: 0, 10, 20, 30, 40, 50
반응형

댓글