Dart 언어 오답노트 : 32. fold()

샤워실의 바보·2023년 10월 27일
0
post-thumbnail

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() 메서드를 사용하여 다양한 유형의 데이터와 작업을 처리하는 예시를 보여줍니다.

  1. 숫자 리스트의 합계 계산:

    • numbers 리스트에 있는 모든 숫자의 합을 계산합니다.
    • 초기값을 0으로 설정하고, 리스트의 각 숫자를 순회하면서 이전의 합계에 더합니다.
    • 결과적으로 25를 출력합니다.
    final sum = numbers.fold<int>(0, (prev, next) => prev + next);
    print(sum);  // 출력: 25
  2. 문자열 리스트를 하나의 문자열로 결합:

    • words 리스트에 있는 모든 문자열을 하나의 문자열로 결합합니다.
    • 초기값을 빈 문자열 ''로 설정하고, 리스트의 각 문자열을 순회하면서 이전 문자열에 이어 붙입니다.
    • 결과적으로 '안녕하세요, 저는 joe입니다.'를 출력합니다.
    final sentence = words.fold<String>('', (prev, next) => prev + next);
    print(sentence);  // 출력: 안녕하세요, 저는 joe입니다.
  3. 문자열 리스트의 총 문자 수 계산:

    • words 리스트에 있는 모든 문자열의 총 문자 수를 계산합니다.
    • 초기값을 0으로 설정하고, 리스트의 각 문자열을 순회하면서 문자열의 길이를 이전의 총계에 더합니다.
    • 결과적으로 19를 출력합니다.
    final count = words.fold<int>(0, (prev, next) => prev + next.length);
    print(count);  // 출력: 19

이 예시들을 통해 fold() 함수의 유용성과 유연성을 볼 수 있습니다. 초기값을 설정할 수 있다는 것은 fold()reduce()보다 더 다양한 상황에서 사용될 수 있다는 것을 의미합니다.

profile
공부하는 개발자

0개의 댓글