반응형
정렬과 필터링(조건) 에 대해 알아봅니다.
메서드
메서드 이름 | 설명 | C# 쿼리 식 구문 |
OrderBy | 오름차순으로 정렬 | orderby |
OrderByDescending | 내림차순으로 정렬 | orderby … descending |
ThenBy | 2차 정렬을 오름차순으로 수행 | orderby …, … |
ThenByDescending | 2차 정렬을 내림차순으로 수행 | orderby …, … descending |
Reverse | 요소의 순서를 거꾸로 변경 | |
OfType | 지정된 형식으로 캐스트할 수 있는지 | |
Where | 조건에 따라 값을 선택 | where |
정렬
정렬은 특정 기준으로 시퀀스들의 요소를 정렬합니다.
정렬 (OrderBy, OrderbyDecending, ThenBy, ThenbyDecending)
아래 예제는 시퀀스의 요소들을 1, 2차 정렬하는 방법을 보여준다
// 샘플 데이터
public class Student
{
public int grade; //학년
public string name; //이름
}
// 예제 데이터
List<Student> students = new List<Student>
{
new Student{grade = 3, name = "Tom" },
new Student{grade = 3, name = "Brian" },
new Student{grade = 4, name = "Chris" },
new Student{grade = 5, name = "James" }
};
// 1차 정렬
var query = from student in students
// grade 를 기준으로 내림차순 (descending 없으면 ascending이 기본 오름차순:사전순)
orderby student.grade descending
select student;
var method = students.OrderByDescending(o => o.grade);
/*
위 두가지 방법은 동일하다.
== 결과==
5 James
4 Chris
3 Tom
3 Brain
*/
// N차 정렬
var query2 = from student in students
// grade 내림차순 정렬 결과에 name으로 오름차순 정렬
orderby student.grade descending, student.name
select student;
var method2 = students.OrderByDescending(student => student.grade).ThenBy(student=> student.name);
/*
==결과==
5 James
4 Chris
3 Brain
3 Tom
*/
순서바꾸기 (Reverse)
요소의 순서들을 바꾼다.
students.Reverse(); // 전체 요소의 순서를 바꿈
/*
결과
5 James
4 Chris
3 Brian
3 Tom
*/
students.Reverse(0,3); // 0 번재 요소부터 3개를 바꿈.
/* 0번째 3개를 바꿈 (위 예제 에서 뒤바뀐 결과에서)
결과
3 Brian
4 Chris
5 James
3 Tom
*/
필터
조건에 맞는 목록만 결과집합에 포함하도록 한다.
필터 (OfType, Where)
조건에 맞는 요소만 선택한다.
List<Student> students = new List<Student>
{
new Student{grade = 3, name = "Tom" },
new Student{grade = 3, name = "Brian" },
new Student{grade = 4, name = "Chris" },
new Student{grade = 5, name = "James" }
};
// grade 가 3이면서 name이 B 로 시작하는 요소만 필터링
var query = from student in students
where student.grade ==3 && student.name.IndexOf("B") >= 0
select student;
var list = students.Where(w => w.grade == 3 && w.name.IndexOf("B")>=0);
foreach(var student in list)
{
Console.WriteLine(student.grade +", " +student.name);
}
/*
* 결과
* 3, Brian
*/
참고 : https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/linq/sorting-data
반응형