오보에블로그
[C#API] 알아두면 유용한 IEnumerable 관련 메소드 본문
728x90
Count
Count<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)
- 해당 람다식에서
true
를 반환하는 원소만 센다.
예시
List<int> numbers = new List<int>() {1,2,3,4,5,6,7,8};
int answer = numbers.Count(
x =>
{
if (x % 2 == 1)
return true;
else
return false;
}
);
Select
- 해당 열거자에대해 다른 포맷으로 변경
예시
int[] numbers = {1,2,3,4,5,6,7 };
IEnumerable<int> query = numbers.Select((number, index) => { if (number % 2 == 0) return number; else return -1; });
IEnumerable<int> squares = Enumerable.Range(1, 10).Select(x => x * x);
TakeWhile
TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)
- 해당 람다식을 참값으로 만족하고 있을때까지 0번째 원소부터 쭉 탐색해서 반환한다.
예시
- 짝수를 만족할때 까지 쭉 반환하다가, 홀수인 1 을 만나고
false
를 반환하여 그 전까지만 열거
int[] numbers = { 2, 4, 6, 12 , 0 , 1, 3, 9 };
IEnumerable<int> query = numbers.TakeWhile(number => (number % 2 == 0));
foreach (int number in query)
{
Console.WriteLine(number); // 2 4 6 12 0
}
Where
Where<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)
: 조건자에 따라 값의 시퀀스를 필터링합니다.Where<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>)
: 원소 인덱스 값도 파라미터로 받을 수 있음
예시
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
IEnumerable<int> query = numbers.Where(number => number % 2 == 0);
foreach (int number in query)
{
Console.WriteLine(number); // 2, 4, 6, 8, 10
}
Zip
Zip<TFirst,TSecond,TResult> (this System.Collections.Generic.IEnumerable<TFirst> first, System.Collections.Generic.IEnumerable<TSecond> second, Func<TFirst,TSecond,TResult> resultSelector);
- 지정된 함수를 두 시퀀스의 해당 요소에 적용하여 결과 시퀀스를 만듭니다.
this IEnumerable<TFirst> first
: 병합할 첫번째 시퀀스IEnumerable<TSecond> second
: 병합할 두번째 시퀀스Func<TFirst, TSecond, TResult> resultSelector
: 두 시퀀스의 요소를 병합하는 방법을 지정하는 함수
예시
int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };
IEnumerable<string> numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second);
foreach (string item in numbersAndWords)
Console.WriteLine(item);
// 1 one
// 2 two
// 3 three
Aggregate
Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)
: 시퀀스에 누적기 함수 적용, 지정된 시드 값은 초기 누적값으로 사용 + 최종 리턴 값을 선택 가능Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)
: 시퀀스에 누적기 함수 적용, 지정된 시드 값은 초기 누적값으로 사용Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)
: 시퀀스에 누적기 함수 적용
예시
// 초기 시드 값 : "banana" , longest 가 누적값 , 최종 반환값은 .ToUpper() 한 값
string longestName =
fruits.Aggregate("banana",
(longest, next) =>
next.Length > longest.Length ? next : longest,
fruit => fruit.ToUpper());
string longestName =
fruits.Aggregate("banana",
(longest, next) =>
next.Length > longest.Length ? next : longest);
string longestName =
fruits.Aggregate((longest, next) =>
next.Length > longest.Length ? next : longest);
728x90
'C++ & C# > C#' 카테고리의 다른 글
[C#API] Comparison<T> (0) | 2021.12.30 |
---|---|
[C#API] IEnumerator & IEnumerable (0) | 2021.12.16 |
[C# API] String Builder (0) | 2021.10.21 |
[c#] Longest Common Substring (0) | 2019.08.04 |
[c#] TimeOutException이 catch되지 않을때 (0) | 2019.08.04 |