-
[프랙티컬 C# 연습문제] 1부 - 3장Development/C# 2023. 7. 15. 00:36728x90
대리자(delegate)
-대리자는 메서드를 대신 호출하는 기법
-대리자는 메서드의 주소를 참조
-대리자를 사용하면 메서드끼리 연결 및 조합이 가능
* Predicate<T>
-delegate의 제네릭 버전
-델리케이트를 직접 정의하지 않아도 된다.
익명 메서드
메서드를 생성하지 않고도 delegate를 생성할 수 있게 해준다.
// delegate(int n) {return n % 2 == 0;} = 익명 메서드 var count = Count(numbers, delegate(int n) {return n % 2 == 0;});
람다식
-일종의 메서드
-C# 3.0부터 delegate 키워드가 없어지고 그 대신 =>(람다 연산자)가 사용된다.
-추상도 증가
var count = Count(numbers, n => n % 2 == 0);
LINQ
-Language Integrated Query
-객체, 데이터, XML과 같은 다양한 데 이터를 표준화된 방법으로 처리할 수 있다.
* 지연실행
LINQ의 특징으로 쿼리는 해당 시점에서 실행되지 않고 실제 값이 필요할 때 실행된다.
// query 변수에 검색된 결과가 대입되는 것이 아니다. var query = names.Where(s => s.Length <=5 ); names[0] = "Busan"; foreach (var item in query) // 변수에 담기는게 아니라 쿼리문이 이때 실행된다. Console.WriteLine(item);
*즉시실행
-검색 된 결과가 변수에 저장된다.
-ToArray, ToList, Count 메서드 등 하나의 값을 반환하는 메서드는 즉시 실행되는 메서드다.
// query 변수에 검색된 결과가 대입된다. var query = names.Where(s => s.Length <= 5).ToArray();
문제 3.1
1.
static void Main(string[] args) { var numbers = new List<int> { 12, 87, 94, 14, 53, 20, 40, 35, 76, 91, 31, 17, 48 }; Console.WriteLine(numbers.Exists(s => s % 8 == 0 || s % 9 == 0)); }
2.
static void Main(string[] args) { var numbers = new List<int> { 12, 87, 94, 14, 53, 20, 40, 35, 76, 91, 31, 17, 48 }; numbers.ForEach(s => Console.WriteLine(s / 2)); }
3.
static void Main(string[] args) { var numbers = new List<int> { 12, 87, 94, 14, 53, 20, 40, 35, 76, 91, 31, 17, 48 }; var result = numbers.Where(w => w >= 50); Console.WriteLine(String.Join(",", result)); }
4.
static void Main(string[] args) { var numbers = new List<int> { 12, 87, 94, 14, 53, 20, 40, 35, 76, 91, 31, 17, 48 }; List<int> result = numbers.Select(s => s * 2).ToList(); Console.WriteLine(String.Join(",", result)); }
문제 3.2
1.
static void Main(string[] args) { var names = new List<string> { "Seoul","New Delhi","Bangkok", "London", "Paris", "Berlin", "Canberra", "Hong Kong" }; var line = Console.ReadLine(); int index = names.FindIndex(s => s == line); Console.WriteLine(index); }
2.
static void Main(string[] args) { var names = new List<string> { "Seoul","New Delhi","Bangkok", "London", "Paris", "Berlin", "Canberra", "Hong Kong" }; int count = names.Count(s => s.Contains('o')); Console.WriteLine(count); }
3.
static void Main(string[] args) { var names = new List<string> { "Seoul","New Delhi","Bangkok", "London", "Paris", "Berlin", "Canberra", "Hong Kong" }; var citiesIncludedO = names.Where(s => s.Contains('o')).ToArray(); Console.WriteLine(String.Join(",", citiesIncludedO)); }
4.
static void Main(string[] args) { var names = new List<string> { "Seoul","New Delhi","Bangkok", "London", "Paris", "Berlin", "Canberra", "Hong Kong" }; var count = names.Where(w => w[0] == 'B').Select(s => s.Count()); Console.WriteLine(String.Join(",", count)); }
728x90'Development > C#' 카테고리의 다른 글
[프렉티컬 C#] 문자열 처리 (0) 2023.07.26 [프렉티컬 C# 연습문제] 2부 - 1장 (0) 2023.07.25 [프랙티컬 C# 연습문제] 1부 - 2장 (0) 2023.07.14 [C#] 정적 메서드(static method)와 인스턴스 메서드(instance method) (0) 2023.07.14 [프랙티컬 C# 연습문제] 1부 - 1장 (0) 2023.07.12