본문 바로가기

Develop/.NET 가이드

[C#] LINQ 사용방법 - 집계 작업 Sum 집계 작업 Aggregators 집계 작업은 집합 모든 요소를 계산하여 하나의 값으로 반환하는 작업입니다. 집계 작업에 해당하는 LINQ 메서드로는 Count, Sum, Min, Max, Average, Aggregate 가 있습니다. Sum 집합 내 모든 원소 더하기 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; double numSum = numbers.Sum(); // numSum = 45 집합 내 원소를 활용하여 더하기 string[] words = { "cherry", "apple", "blueberry" }; double totalChars = words.Sum(w => w.Length); // totalChars = 20 words 배열의 strin..
[C#] LINQ 사용방법 - 집계 작업 Count 집계 작업 Aggregators 집계 작업은 집합 모든 요소를 계산하여 하나의 값으로 반환하는 작업입니다. 집계 작업에 해당하는 LINQ 메서드로는 Count, Sum, Min, Max, Average, Aggregate 가 있습니다. Count 집합 내 요소 개수 세기 int[] factorsOf300 = { 2, 2, 3, 5, 5 }; int uniqueFactors = factorsOf300.Distinct().Count(); // uniqueFactors = 3 Distinct 메서드로 중복되는 값인 2와 5를 하나씩 제거한 뒤, 개수를 셉니다. 집합 내 조건에 맞는 요소 개수 세기 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; int oddNumber..
[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 :..