반응형
정렬 연산자 Ordering Operator
정렬 연산자인 OrderBy는 당연히 출력 시퀀스를 기준에 따라 정렬하는 연산자입니다. 자주 사용하는 연산자이므로 여러 예제를 통해 익히고 자주 사용하여 경험을 쌓길 바랍니다.
원소 정렬하기
알파벳 순서로 정렬합니다.
string[] words = { "cherry", "apple", "blueberry" };
var sortedWords = from word in words
orderby word
select word;
// sortedWords = { "apple", "blueberry", "cherry" };
원소의 속성으로 정렬하기
String.Length 속성을 사용하여 정렬합니다.
string[] words = { "cherry", "apple", "blueberry" };
var sortedWords = from word in words
orderby word.Length
select word;
// sortedWords = { "apple", "cherry", "blueberry" }
클래스의 속성으로 정렬하기
Product.ProductName 속성으로 정렬합니다.
List<Product> products = GetProductList();
var sortedProducts = from prod in products
orderby prod.ProductName
select prod;
내림차순으로 정렬하기
descending 키워드로 내림차순 정렬합니다.
double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };
var sortedDoubles = from d in doubles
orderby d descending
select d;
// sortedDoubles = { 4.1, 2.9, 2.3, 1.9, 1.7 }
List<Product> products = GetProductList();
var sortedProducts = from prod in products
orderby prod.UnitsInStock descending
select prod;
여러 기준으로 정렬하기
먼저 digit.Length로 정렬한 뒤, digit 으로 알파벳 오름차순으로 정렬합니다.
string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
var sortedDigits = from digit in digits
orderby digit.Length, digit
select digit;
// sortedDigits = {
// "one", "six", "two",
// "five", "four", "nine", "zero",
// "eight", "seven", "three"
// }
먼저 Product.Category 속성으로 오름차순 정렬한 뒤, Product.UnitPrice 속성으로 내림차순 정렬합니다.
List<Product> products = GetProductList();
var sortedProducts = from prod in products
orderby prod.Category, prod.UnitPrice descending
select prod;
정렬 뒤집기
digits 배열 원소 중 두번째 문자가 'i'인 원소만 출력 시퀀스에 추가한 뒤, 출력 시퀀스 순서를 뒤집습니다.
string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
var reversedIDigits = (
from digit in digits
where digit[1] == 'i'
select digit)
.Reverse();
// reversedIDigits = { "nine", "eight", "six", "five" };
비교 연산자를 구현해 활용하기
먼저 비교 연산자를 구현합니다.
public class CaseInsensitiveComparer : IComparer<string>
{
public int Compare(string x, string y) =>
string.Compare(x, y, StringComparison.OrdinalIgnoreCase);
}
이제 구현된 비교 연산자를 LINQ OrderBy 메서드에 활용합니다.
string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
var sortedWords = words.OrderBy(a => a, new CaseInsensitiveComparer());
// sortedWords = { "AbAcUs", "aPPLE", "BlUeBeRrY", "bRaNcH", "cHeRry", "ClOvEr" }
string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
var sortedWords = words.OrderByDescending(a => a, new CaseInsensitiveComparer());
// sortedWords = { "ClOvEr", "cHeRry", "bRaNcH", "BlUeBeRrY", "aPPLE", "AbAcUs" }
비교 연산자를 중첩해서 사용하기
OrderBy 메서드로 정렬 후에 ThenBy 연산자로 추가 정렬합니다.
string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
var sortedWords = words
.OrderBy(a => a.Length)
.ThenBy(a => a, new CaseInsensitiveComparer());
// sortedWords = {
// "aPPLE",
// "AbAcUs", "bRaNcH", "cHeRry", "ClOvEr",
// "BlUeBeRrY"
// }
string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
var sortedWords = words
.OrderBy(a => a.Length)
.ThenByDescending(a => a, new CaseInsensitiveComparer());
// sortedWords = {
// "BlUeBeRrY"
// "AbAcUs", "bRaNcH", "cHeRry", "ClOvEr",
// "aPPLE",
// }
반응형
'Develop > .NET 가이드' 카테고리의 다른 글
[C#] LINQ 사용방법 - 집합 연산자 Distinct, Union, Intersect, Except (0) | 2020.02.02 |
---|---|
[C#] LINQ 사용방법 - 그룹 연산자 Group by into (0) | 2020.02.02 |
[C#] LINQ 사용방법 - 분할 연산자 Take, Skip, TakeWhile, SkipWhile (0) | 2020.02.01 |
[C#] LINQ 사용방법 - Select (0) | 2019.12.03 |
[C#] LINQ 사용방법 - Where (0) | 2019.12.03 |
꾸준히 노력하는 개발자 "김예건" 입니다.