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
'개발일지 > 임시카테고리' 카테고리의 다른 글
dart - functional program (펑셔널 프로그램) (0) | 2025.03.24 |
---|---|
dart - cascading (다트 - 캐스캐이딩) (0) | 2025.03.24 |
dart - reduce 설명 (loop문), 애로우문 포함 (0) | 2025.03.24 |
dart - Map을 Mapping할때 - (다트 - 맵을 매핑할때) (0) | 2025.03.24 |
dart - List를 Mapping (0) | 2025.03.24 |