람다 연산자
- 람다 식에서 람다 연산자
=>
의 왼쪽은 "매개변수", 오른쪽은 "람다 본문"으로 구분하여 사용합니다.
Step0 (가장 긴 코드)
- 람다식이 judge변수에 대입되고, 그 judge변수가 Count 메서드의 인수에 전달된다.
Predict<int> judge =
//아래 부분이 람다식. judge변수에 대입한다.
(int n) => {
if(n % 2 == 0)
return true;
else
return false;
}
Step1
- Step0의 judge변수를 없애고 식을 직접 Count메서드의 인수로 지정하겠습니다.
var count = Count(numbers,
(int n) => {
if(n % 2 == 0)
return true;
else
return false;
}
);
Step2
- 다음 두 가지 이유로 if문을 없앨 수 있습니다.
- return의 오른쪽에 식을 쓸 수 있다.
n % 2 == 0
은 식이며 bool형의 값을 가진다. (식이 성립하면 true, 성립하지 않으면 false)
var count = Count(numbers, (int n) => {return n % 2 == 0; });
Step3
- 람다식에서 {}가 하나의 명령문을 포함할 때는 {}와 return을 생략할 수 있습니다.
var count = Count(numbers, (int n) => n % 2 == 0);
Step4
- 람다식에서는인수의 형을 생략할 수 있습니다.
- 컴파일러가 형을 제대로 추론해주므로 형을 명시하지 않아도 됩니다.
var count = Count(numbers, (n) => n % 2 == 0);
Step5
- 인수가 한개인 경우 ()를 생략할 수 있습니다.
var count = Count(numbers, n => n % 2 == 0);
람다식을 사용한 예
홀수의 개수를 센다
var count = Count(numbers, n => n % 2 == 1);
5이상인 개수를 센다.
var count = Count(numbers, n => n >= 5);
숫자에 1이 포한된 수의 개수를 센다.
var count = Count(numbers, n => n.ToString().Contains('1') );
List와 람다식
- 다음 리스트가 있다고 합시다.
Existsvar list = new List<string> { "soeul", "New Delhi", "bangkok", "joenju", "Daegu", "Berlin" };
- 해당 조건의 요소가 있는지 확인합니다.
- list의 요소들이 순차로 s에 대입되고, 람다식 본문에서 s[0]이 'A'인지 판정합니다.
- s[0]은 요소의 첫 글자를 의미합니다.
var exists = list.Exists(s => s[0] == 'A');
- s[0]은 요소의 첫 글자를 의미합니다.
Find
- 람다식의 조건과 일치하는 요소를 검색 -> 일치하는 조건들 중
첫번째 요소를 반환
합니다.
var name = list.Find(s => s.Length == 6);
Console.WriteLine(name);
FindIndex
- Find와 비슷하게, 일치하는 조건들 중
첫번째 요소의 인덱스
를 반환합니다.var index = list.FindIndex(s => s.Length == "joenju"); Console.WriteLine(index);
FindAll
- 조건에 일치하는
모든 요소를 반환
합니다.var names = list.FindAll(s => s.Length <= 5); foreach(var s in names) Console.WriteLine(s);
RemoveAll
- 조건에 일치하는
모든 요소를 삭제
합니다. 삭제한 요소의 개수
를 반환합니다.
var removedCount = list.RemoveAll(s => s.Contains("s"));
Console.WriteLine(removedCount);
ForEach
- 인수로 지정한 처리 내용을 리스트의 각 요소에 순차로 실행합니다.
- ForEach 메서드는 Action 델리게이트를 인수로 받아들입니다.
- 이제까지 살펴본 예는 Predicate 델리게이트를 인수로 받는 메서드였습니다.
- Predicate 델리게이트 : 반환값이 bool, 매개변수가 1개 입니다.
- 어떤 기준을 만족하는지를 판단하는 메서드를 나타냅니다.
- Action델리게이트 : 반환값이 void, 매개변수가 1개 입니다.
list.ForEach(s => Console.WriteLine(s));
ConvertAll
- 모든 요소를 형 변환 후
변환된 요소가 저장된 리스트
를 반환합니다. - 원본 list는 변화하지 않습니다.
var upperList = list.ConvertAll(x => x.ToUpper());
'프로그래밍 > (도서)프랙티컬 C#' 카테고리의 다른 글
[C#] 프랙티컬 C# - 2.2 매출 계산 프로그램 (0) | 2022.03.31 |
---|---|
[C#] 프랙티컬 C# - 2.1 거리 환산 프로그램 (0) | 2022.03.31 |
[C#] 프랙티컬 C# - 1. 객체지향 프로그래밍 기초 (0) | 2022.03.31 |