fold() 함수는 reduce() 함수와 실행되는 논리는 같습니다. 다만. reduce 함수는 함수가 실행되는 리스트 요소들의 타입이 같아야 하지만, fold() 함수는 어떠한 타입이든 반환할 수 있습니다.
void main() {
List<String> blackPinkList = [
'리사',
'지수',
'제니',
'로제',
]
// reduce() 함수와 마찬가지로 각 요소를 순회하며 실행됩니다.
final allMembers = blackPinkList.fold<int>(0, (value, element) => value + element.length);
print(allMembers);
}
fold() 함수는 reduce() 함수의 특수한 형태입니다.
reduce() 함수는 리스트를 구성하는 값들의 타입과 반환되는 리스트를 구성할 값들의 타입이 완전히 같아야 합니다.
그러나 fold() 함수는 그러한 제약이 없습니다.
그래서 첫 번째 매개변수에 시작할 값을 지정하고, 두 번째 매개변수에는 reduce() 함수와 똑같이 작동하는 함수를 입력합니다.
다만, 첫 번째 순회 때 리스트의 첫 번째 값이 아닌 fold() 함수의 첫 번째 매개변수에 입력된 값이 초깃값으로 사용됩니다.
두 번째 매개변수인 (value, element) => value + element.length는 람다식으로 value에는 최초 순회 때는 초깃값(여기서는 0)이 입력되고 이후에는 기존 순회의 반환값이 입력됩니다. element는 reduce() 함수와 마찬가지로 리스트의 다음 값이 입력됩니다.
blackPinkList
에 있는 모든 멤버의 이름의 총 문자 수를 계산합니다.
초기값을 0
으로 설정하고, 리스트의 각 문자열을 순회하면서 문자열의 길이를 이전의 총계에 더합니다.
결과적으로 12
를 출력합니다 (리사(2) + 지수(2) + 제니(2) + 로제(3) = 9).
final allMembers = blackPinkList.fold<int>(0, (value, element) => value + element.length);
print(allMembers); // 출력: 12
List<int> numbers = [1, 3, 5, 7, 9];
final sum = numbers.fold<int>(0, (prev, next) => prev + next);
print(sum);
List<String> words = [
'안녕하세요, ',
'저는 ',
'joe입니다.',
];
final sentence = words.fold<String>('', (prev, next) => prev + next);
print(sentence);
final count = world.fold<int>(0, (prev, next) => prev + next.length);
위의 Dart 코드는 fold()
메서드를 사용하여 다양한 유형의 데이터와 작업을 처리하는 예시를 보여줍니다.
숫자 리스트의 합계 계산:
numbers
리스트에 있는 모든 숫자의 합을 계산합니다.0
으로 설정하고, 리스트의 각 숫자를 순회하면서 이전의 합계에 더합니다.25
를 출력합니다.final sum = numbers.fold<int>(0, (prev, next) => prev + next);
print(sum); // 출력: 25
문자열 리스트를 하나의 문자열로 결합:
words
리스트에 있는 모든 문자열을 하나의 문자열로 결합합니다.''
로 설정하고, 리스트의 각 문자열을 순회하면서 이전 문자열에 이어 붙입니다.'안녕하세요, 저는 joe입니다.'
를 출력합니다.final sentence = words.fold<String>('', (prev, next) => prev + next);
print(sentence); // 출력: 안녕하세요, 저는 joe입니다.
문자열 리스트의 총 문자 수 계산:
words
리스트에 있는 모든 문자열의 총 문자 수를 계산합니다.0
으로 설정하고, 리스트의 각 문자열을 순회하면서 문자열의 길이를 이전의 총계에 더합니다.19
를 출력합니다.final count = words.fold<int>(0, (prev, next) => prev + next.length);
print(count); // 출력: 19
이 예시들을 통해 fold()
함수의 유용성과 유연성을 볼 수 있습니다. 초기값을 설정할 수 있다는 것은 fold()
가 reduce()
보다 더 다양한 상황에서 사용될 수 있다는 것을 의미합니다.