본문 바로가기
개발일지/임시카테고리

dart - fold (reduce와 비슷한 반복문)

by 다니엘의 개발 이야기 2025. 3. 24.
320x100
void main(){
  List<int> numbers = [1,3,5,7,9];
  
  final sum = numbers.fold<int>(0, (prev, next){
    // 과정출력
    print('--------------');
    print('prev: $prev');
    print('next: $next');
    print('total: ${prev + next}');
    
    return prev + next;
  });
  
  print(sum);
}

이것에 대한 결과는

// 1트부터 reduce와 차이점은, 파라메타에 첫 값으로 입력된 0이 prev 값으로 들어간다.
// next에는 numbers[0]이 들어간다.

// 그외의 진행은 reduce와 같다.
// 그래서 1트의 total이 2트의 prev가 되고
// 2트의 total이 3트의 prev가 된다.

--------------
prev: 0
next: 1
total: 1
--------------
prev: 1
next: 3
total: 4
--------------
prev: 4
next: 5
total: 9
--------------
prev: 9
next: 7
total: 16
--------------
prev: 16
next: 9
total: 25
25

이렇게 나온다.

 

void main(){
  List<int> numbers = [1,3,5,7,9];
  
  
  final sum = numbers.fold<int>(0, (prev, next) => prev + next);
  
  print(sum);
  // 25
  
  List<String> words = [
    '안녕하세요', '저는', '헬로우 입니다.' 
  ];
  
  final sentence = words.fold<String>('', (prev, next) => prev + next);
  
  print(sentence);
  // 안녕하세요저는헬로우 입니다.
  
  final count = words.fold<int>(0, (prev, next) => prev + next.length);
  
  print(count);
  // 15
}

 

결과적으로 reduce를 할때는, 원본참조 타입이 String이였을때, 새로 담길 값이 int여도 긁어와서 수량을 파악하는게 어려웠던 것 같은데,

fold의 경우는 원본참조의 타입이 String이라 하더라도 결과적으로 int 값으로 변수에 담게 되면 담기는 것을 확인했다.

300x250