본문 바로가기

LINQ

[C#] LINQ 사용방법 - Quantifiers Any, All 수량자(?) Quantifiers 이상하게도 마이크로소프트 공식 번역은 '수량자'지만 수량과는 전혀 상관이 없습니다. Any 메서드는 집합 안에 조건에 맞는 요소가 하나라도 있는지 확인하는 메서드이고, All 메서드는 집합 안에 모든 요소가 조건에 맞는지 확인하는 메서드입니다. 하나라도 조건에 맞는 요소가 있는지 확인하기 string[] words = { "believe", "relief", "receipt", "field" }; bool iAfterE = words.Any(w => w.Contains("ei")); // iAfterE = true; words 배열 안에 "receipt" 는 "ei"를 포함하므로 iAfterE 는 true 가 됩니다. 모든 요소가 조건에 맞는지 확인하기 i..
[C#] LINQ 사용방법 - Range, Repeat Range Rnage 메서드는 특정 범위의 숫자 집합을 만들 때 사용하는 메서드입니다. System.Collections.Generic.IEnumerable Range (int start, int count) start 부터 count 만큼 숫자 범위 집합을 생성합니다. var numbers = from n in Enumerable.Range(100, 50) // 100 - 149 까지 select (Number: n, OddEven: n % 2 == 1 ? "odd" : "even"); Repeat Repeat 메서드는 특정 숫자를 특정 횟수만큼 반복한 집합을 만들 때 사용하는 메서드입니다. System.Collections.Generic.IEnumerable Repeat (TResult element..
[C#] LINQ 사용방법 - 요소 연산자 First, FirstOrDefault, ElementAt 요소 연산자 Element Operators 요소 연산자는 LINQ 구문 결과에서 원하는 위치의 요소 하나를 선택할 때 사용하는 연산자입니다. 정렬 연산자 orderby 와 같이 사용하는 경우가 많습니다. 주어진 조건으로 검색된 첫 번째 요소 찾기 List products = GetProductList(); Product product12 = (from p in products where p.ProductID == 12 select p) .First(); products 리스트에서 ProductID가 12인 요소 중 첫 번째로 검색된 요소가 product12 변수에 할당됩니다. string[] strings = { "zero", "one", "two", "three", "four", "five", "si..
[C#] LINQ 사용방법 - 변환 연산자 ToArray, ToList, ToDictionary, OfType 변환 연산자 Conversion Operators LINQ 구문은 IEnumerable 인터페이스를 반환합니다. 하지만 코드를 작성하다보면 인터페이스가 아닌 구체화된 클래스가 필요할 때가 있습니다. 그 때 변환 연산자를 활용하여 Array, List, Dictionary 타입으로 변환할 수 있습니다. 주의사항 LINQ 구문은 Lazy 전략을 사용하여 코드가 정의되어 있는 구간에서 실행되지 않습니다. 그런데 변환 연산자를 사용하게 되면 바로 연산을 끝내기 때문에 연산이 많은 LINQ 구문은 성능에 영향을 미칠 수 있습니다. ToArray double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 }; var sortedDoubles = from d in doubles orderby d..
[C#] LINQ 사용방법 - 집합 연산자 Distinct, Union, Intersect, Except 집합 연산자 Set Operators 집합 연산자는 두 집합 간에 관계를 활용하는 연산자합니다. LINQ 메서드 중 Distinct, Union, Intersect, Except 가 집합 연산자에 해당합니다. 집합 내에 중복 요소 제거하기 Distinct 메서드로 factorsOf300 배열에서 중복을 제거한 uniqueFactors 배열을 만듭니다. int[] factorsOf300 = { 2, 2, 3, 5, 5 }; var uniqueFactors = factorsOf300.Distinct(); // uniqueFactors = { 2, 3, 5 }; 두 집합에서 중복되지 않게 합집합 만들기 Union 메서드는 두 집합을 각 원소가 중복되지 않도록 더한 새로운 집합을 만듭니다. int[] numbe..
[C#] LINQ 사용방법 - 그룹 연산자 Group by into 그룹연산자 Grouping Operators 그룹연산자는 group by 와 into 키워드를 사용합니다. 그룹 연산자는 입력 시퀀스를 주어진 키에 맞춰 바구니에 나눠 담습니다. 바구니에 나눠담기 numbers 배열 원소를 5로 나누었을 때 나머지 값을 기준으로 나누어 담습니다. int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var numberGroups = from n in numbers group n by n % 5 into g select (Remainder: g.Key, Numbers: g); // numberGroups = { // { 0 : [ 5, 0 ] }, // { 4 : [ 4, 9 ] }, // { 1 : [ 1, 6 ] }, // { 3 :..
[C#] LINQ 사용방법 - 정렬 연산자 OrderBy, ThenBy, OrderByDescending, ThenByDescending 정렬 연산자 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", ..
[C#] LINQ 사용방법 - 분할 연산자 Take, Skip, TakeWhile, SkipWhile 분할 연산자 Partition Operator LINQ 에서 제공하는 확장 메서드 중 Take, Skip, TakeWhile, SkipWhile 을 분할 연산자라 합니다. 왜냐하면 분할 연산자는 출력 시퀀스를 분할시켜 반환하기 때문입니다. Take 분할 연산자 Take 메서드로 numbers 배열에서 처음 3개의 원소만 꺼내 출력 시퀀스를 만듭니다. int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var first3Numbers = numbers.Take(3); // first3Numbers = { 5, 4, 1 }; 출력 시퀀스는 Ienumerable 인터페이스로 반환되므로, LINQ 결과에 Take 메서드를 연결하여 사용할 수 있습니다. List custome..