배열에서 특정 값 삭제하는 방법
C#에서 배열의 특정 값을 삭제하는 메서드는 존재하지 않습니다.
하지만, Array 클래스가 아닌 다른 클래스에서 제공하는 메서드를 응용한다면, 특정 값이 제거된 새로운 배열을 만들 수 있습니다.
이번 포스팅은 배열에서 특정 값이 제거된 새로운 배열을 생성하는 몇 가지 방법을 소개합니다.
- LINQ의 Where 메서드
- LINQ의 Except 메서드
- Array 클래스의 FindAll 메서드
참고로 LINQ의 Where() 메서드와 Except() 메서드를 사용하기 위해서는 .Net Framework 3.5 버전 이상이어야 합니다.
LINQ의 Where 메서드
LINQ에서 제공하는 Where() 메서드는 배열 또는 List와 같은 데이터 집합에서 특정 데이터를 필터링하는 목적으로 사용됩니다.
다음 예제는 int 타입의 배열에서 3이 제거된 새로운 배열을 반환합니다.
class Program
{
static void Main(string[] args)
{
int[] intArray = { 1, 2, 3, 1, 2, 3 };
int[] newArray = intArray.Where(num => num != 3).ToArray();
Console.WriteLine("[기존 배열: intArray]");
foreach(int num in intArray)
{
Console.Write(num + " ");
}
Console.WriteLine("\n");
Console.WriteLine("[새로운 배열: newArray]");
foreach (int num in newArray)
{
Console.Write(num + " ");
}
}
}
[실행 결과]
[기존 배열: intArray]
1 2 3 1 2 3
[새로운 배열: newArray]
1 2 1 2
LINQ에서 제공하는 Where() 메서드는 배열이 아닌 IEnumerable<TSource>를 반환합니다.
따라서, Where() 메서드 뒤에 ToArray() 메서드를 호출하여 IEnumerable<TSource>를 배열로 변환합니다.
LINQ의 Where 메서드 - 여러 값 제거
Where() 메서드 사용 방법이 익숙하다면, 배열에서 제거하고 싶은 값을 여러 개 설정할 수 있습니다.
다음 예제는 int 타입의 배열에서 2와 3이 제거된 새로운 배열을 반환합니다.
class Program
{
static void Main(string[] args)
{
int[] intArray = { 1, 2, 3, 1, 2, 3 };
int[] newArray = intArray.Where(num => num != 2 && num != 3).ToArray();
Console.WriteLine("[기존 배열: intArray]");
foreach(int num in intArray)
{
Console.Write(num + " ");
}
Console.WriteLine("\n");
Console.WriteLine("[새로운 배열: newArray]");
foreach (int num in newArray)
{
Console.Write(num + " ");
}
}
}
[실행 결과]
[기존 배열: intArray]
1 2 3 1 2 3
[새로운 배열: newArray]
1 1
LINQ에서 Where() 메서드 사용 방법은 아래 포스팅에서 확인할 수 있습니다.
LINQ의 Except 메서드
두 번째 방법으로 LINQ에서 제공하는 Except() 메서드를 사용합니다.
Except() 메서드는 차집합 메서드로 알려져 있으며, 배열 또는 List와 같은 데이터 집합에서 특정 데이터가 제거된 데이터를 반환합니다.
다음 예제는 int 타입의 배열에서 3이 제거된 새로운 배열을 반환합니다.
class Program
{
static void Main(string[] args)
{
int[] intArray = { 1, 2, 3, 4, 5 };
int[] newArray = intArray.Except(new int[] { 3 }).ToArray();
Console.WriteLine("[기존 배열: intArray]");
foreach(int num in intArray)
{
Console.Write(num + " ");
}
Console.WriteLine("\n");
Console.WriteLine("[새로운 배열: newArray]");
foreach (int num in newArray)
{
Console.Write(num + " ");
}
}
}
[실행 결과]
[기존 배열: intArray]
1 2 3 4 5
[새로운 배열: newArray]
1 2 4 5
Where() 메서드와 마찬가지로 Except() 메서드는 IEnumerable<TSource>를 반환합니다.
따라서, ToArray() 메서드를 호출하여 IEnumerable<TSource>를 배열로 변환합니다.
Except 메서드의 문제점
Except() 메서드의 문제점은 중복 값이 제거된 배열을 반환한다는 것입니다.
따라서, 배열에 중복 값이 존재하는 경우 Except() 메서드를 사용하면 안 됩니다.
다음 예제는 int 타입의 배열에 중복 값인 1, 2가 존재합니다.
Except() 메서드를 사용하여 3이 제거된 새로운 배열을 확인하면 중복 값이 제거된 것을 확인할 수 있습니다.
class Program
{
static void Main(string[] args)
{
int[] intArray = { 1, 2, 3, 1, 2, 4 };
int[] newArray = intArray.Except(new int[] { 3 }).ToArray();
Console.WriteLine("[기존 배열: intArray]");
foreach(int num in intArray)
{
Console.Write(num + " ");
}
Console.WriteLine("\n");
Console.WriteLine("[새로운 배열: newArray]");
foreach (int num in newArray)
{
Console.Write(num + " ");
}
}
}
[실행 결과]
[기존 배열: intArray]
1 2 3 1 2 4
[새로운 배열: newArray]
1 2 4
LINQ에서 Except() 메서드 사용 방법은 아래 포스팅에서 확인할 수 있습니다.
Array의 FindAll 메서드
마지막 방법으로 Array 클래스에서 제공하는 FindAll() 메서드를 사용합니다.
FindAll() 메서드의 첫 번째 매개변수로 배열을 전달하고 두 번째 매개변수로 조건문을 전달합니다.
FindAll() 메서드는 LINQ의 Where() 메서드와 비슷하며, 조건을 만족하는 모든 요소를 반환합니다.
다음 예제는 int 타입의 배열에서 3이 제거된 새로운 배열을 반환합니다.
class Program
{
static void Main(string[] args)
{
int[] intArray = { 1, 2, 3, 1, 2, 4 };
int[] newArray = Array.FindAll(intArray, num => num != 3).ToArray();
Console.WriteLine("[기존 배열: intArray]");
foreach(int num in intArray)
{
Console.Write(num + " ");
}
Console.WriteLine("\n");
Console.WriteLine("[새로운 배열: newArray]");
foreach (int num in newArray)
{
Console.Write(num + " ");
}
}
}
[실행 결과]
[기존 배열: intArray]
1 2 3 1 2 4
[새로운 배열: newArray]
1 2 1 2 4
Array의 FindAll 메서드 - 여러 값 제거
Array 클래스의 FindAll() 메서드는 Where() 메서드처럼 조건문을 통해 여러 값을 제거할 수 있습니다.
다음 예제는 int 타입의 배열에서 2와 3이 제거된 새로운 배열을 반환합니다.
class Program
{
static void Main(string[] args)
{
int[] intArray = { 1, 2, 3, 1, 2, 4 };
int[] newArray = Array.FindAll(intArray, num => num != 2 && num != 3).ToArray();
Console.WriteLine("[기존 배열: intArray]");
foreach(int num in intArray)
{
Console.Write(num + " ");
}
Console.WriteLine("\n");
Console.WriteLine("[새로운 배열: newArray]");
foreach (int num in newArray)
{
Console.Write(num + " ");
}
}
}
[실행 결과]
[기존 배열: intArray]
1 2 3 1 2 4
[새로운 배열: newArray]
1 1 4
'C# > 배열' 카테고리의 다른 글
[C#]배열 복사하는 방법 (0) | 2022.08.23 |
---|---|
[C#]배열의 타입을 변경하는 방법 (0) | 2022.08.18 |
[C#]배열을 리스트로(Array to List), 리스트를 배열로(List to Array) (0) | 2021.10.04 |
[C#]배열 정렬 방법(Sort, OrderBy) (1) | 2021.10.04 |
[C#]배열 값 위치(index) 찾기(IndexOf, FindIndex) (0) | 2021.10.03 |
댓글