본문 바로가기

Dart

[Dart] List 고급 - forEach, map, fold, reduce

void main() {
  //looping
  //Mapping
  //Reduce/Fold
  
  List<String> students = ['김군','이군','박군','홍군','정군',];
  

  students.forEach((value){
    print(value);
  });
  print('---------- && ----------');
  
  for(String value in students){
    print(value);
  }
  print('---------- && ----------');
  
  final newList = students.map((value){
    return 'My name is $value.';
  });
  print(newList);
  print(students);
  
  print(newList is Iterable);
  print(students is List);
  print('---------- && ----------');
  
  List<int> numbers = [1,2,3,4,5];
  
  int total = numbers.fold(0, (total, element){
    return total + element;
  });
  print('total(fold) is $total');
  print('---------- && ----------');
//   index = 0
//   element = 1;
//   total = 0;
//   return = 0 + 1 => total
   
//   index = 1
//   element = 2;
//   total = 1;
//   return = 1 + 2 => total

  int total2 = numbers.reduce((total, element){
    return total + element;
  });
  print('total2(reduce) is $total2');
  print('---------- && ----------');
  
//   차이점
//   리턴 타입과 리스트타입이 같으면 fold/reduce 사용가능
//   다르면 fold만 사용가능, total4 는 오류나서 테스트 불가
  List<String> names = ['밀라노','로마','서울',];
  int total3 = names.fold(0, (total, element){
    return total + element.length;
  });
  print('total3(fold) is $total3');
  print('---------- && ----------');

// total은 스트링, element.length은 int 타입이라 오류 발생.
// 리턴타입(int total4)와 리스트(List<String>) 타입이 같아야 한다.
//   int total4 = names.reduce((total, element){
//     return total + element.length;
//   });
//   print('total4(reduce) is $total4');
//   print('---------- && ----------');
  
}

--------------------------------------------[result]

김군
이군
박군
홍군
정군
---------- && ----------
김군
이군
박군
홍군
정군
---------- && ----------
(My name is 김군., My name is 이군., My name is 박군., My name is 홍군., My name is 정군.)
[김군, 이군, 박군, 홍군, 정군]
true
true
---------- && ----------
total(fold) is 15
---------- && ----------
total2(reduce) is 15
---------- && ----------
total3(fold) is 7
---------- && ----------

'Dart' 카테고리의 다른 글

[Dart] Map 고급 - entries, asMap  (0) 2021.05.28
[Dart] Class - Cascade  (0) 2021.05.27
[Dart] Class - interface  (0) 2021.05.27
[Dart] Class - super, this  (0) 2021.05.27
[Dart] Class - Static  (0) 2021.05.27