Reverse 메서드
LINQ의 Reverse() 메서드는 원본 데이터를 변경하지 않고 반전된 데이터를 반환합니다. Reverse() 메서드는 System.Linq 및 System.Collections.Generic 네임스페이스에 존재합니다.
.Net Framework에서 제공하는 Reverse() 메서드는 두 개이며, 이 둘은 네임스페이스가 다르므로 서로 다른 메서드입니다.
우선, System.Linq에 존재하는 Reverse() 메서드는 Enumerable 클래스에서 구현되며 IEnumerable<TSource> 타입을 반환합니다.
public static IEnumerable<TSource> Reverse<TSource>(
this IEnumerable<TSource> source);
System.Collections.Generic 네임스페이스에 존재하는 Reverse() 메서드는 void 타입을 반환합니다.
public void Reverse();
Reverse() 메서드가 두 개라는 점을 염두해두고 예제를 살펴봅시다.
예제 1. System.Linq의 Reverse 메서드
먼저, System.Linq의 Reverse() 메서드를 질의 구문과 메서드 구문에서 사용하는 방법입니다.
질의 구문
- 질의 구문에서는 Reverse() 메서드를 호출할 수 없으므로 질의 구문의 결과에서 Reverse() 메서드를 호출합니다.
메서드 구문
- List 객체에서 Revsere() 메서드를 호출하면 System.Collections.Generic 네임스페이스의 Reverse() 메서드로 인식합니다. System.Linq의 Reverse() 메서드를 호출하기 위해서는 제네릭 타입을 명시합니다.
다음 예제는 int 타입의 List 객체에서 System.Linq의 Reverse() 메서드를 호출합니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
5, 10, 15, 20, 25, 30
};
// 1. 질의 구문(Query Syntax)
List<int> linqQueryResult = (from num in intList
select num).Reverse().ToList();
// 2. 메서드 구문(Method Syntax)
List<int> linqMethodResult = intList.Reverse<int>().ToList();
Console.WriteLine("질의 구문");
foreach (int num in linqQueryResult)
Console.Write(num + " ");
Console.WriteLine("\n메서드 구문");
foreach (int num in linqMethodResult)
Console.Write(num + " ");
Console.WriteLine("\n데이터 원본");
foreach (int num in intList)
Console.Write(num + " ");
}
}
[실행 결과]
질의 구문
30 25 20 15 10 5
메서드 구문
30 25 20 15 10 5
데이터 원본
5 10 15 20 25 30
데이터 원본은 변경되지 않고 반전된 데이터를 출력합니다.
예제 2. System.Collections.Generic의 Reverse 메서드
다음 예제는 System.Collections.Generic의 Reverse() 메서드를 호출합니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
5, 10, 15, 20, 25, 30
};
intList.Reverse();
Console.WriteLine("데이터 원본");
foreach (int num in intList)
Console.Write(num + " ");
}
}
[실행 결과]
데이터 원본
30 25 20 15 10 5
System.Linq의 Reverse() 메서드와 달리 데이터 원본을 변경합니다.
예제 3. List에 System.Linq의 Reverse 메서드 적용
List<T> 타입의 컬렉션에서 System.Linq의 Reverse() 메서드를 호출하는 방법은 위에서 설명했듯이 제네릭 타입을 명시하거나 AsEnumerable() 메서드를 사용하여 List<T> 컬렉션을 IEnumerable 타입으로 변환하거나 AsQueryable() 메서드를 사용하여 IQueryable 타입으로 변환해야 합니다.
다음 예제는 int 타입의 List 객체를 IEnumerable 그리고 IQueryable 타입으로 변환 후 Reverse() 메서드를 호출합니다.
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>()
{
5, 10, 15, 20, 25, 30
};
// 1. AsQueryable() 메서드 호출
List<int> linqReverseResult1 = intList.AsQueryable().Reverse().ToList();
// 2. AsEnumerable() 메서드 호출
List<int> linqReverseResult2 = intList.AsEnumerable().Reverse().ToList();
Console.WriteLine("AsQueryable() 메서드 호출");
foreach (int num in linqReverseResult1)
Console.Write(num + " ");
Console.WriteLine("\nAsEnumerable() 메서드 호출");
foreach (int num in linqReverseResult2)
Console.Write(num + " ");
}
}
[실행 결과]
AsQueryable() 메서드 호출
30 25 20 15 10 5
AsEnumerable() 메서드 호출
30 25 20 15 10 5
'C# > LINQ' 카테고리의 다른 글
[C#]LINQ 특정 조건을 만족하는지 체크하는 방법 - All, Any 메서드 (1) | 2022.07.24 |
---|---|
[C#]LINQ 특정 값 포함 여부 - Contains 메서드 (0) | 2022.07.18 |
[C#]LINQ 특정 필드 순서대로 정렬 (0) | 2022.07.17 |
[C#]LINQ 정렬 - OrderBy, OrderByDescending 메서드 (0) | 2022.07.17 |
[C#]LINQ 합치기 - Concat 메서드 (0) | 2022.07.17 |
댓글