카테고리 없음

Dart 언어 정리 : List 심화(forEach, map, reduce, fold, =>함)

  • -
반응형

 

 

 

 

 

Dart 언어 정리 : List 심화(forEach, map, reduce, fold)

 


 

일단 리스트를 먼저 만들어줍니다.

 

 

    

void main() {
  
  //Looping
  //Mapping
  //Reduce
  //Fold
  
  
  List<String> newjeans = [
    '민지',
    '하니',
    '해린',
    '혜인',
      '다니엘'
  ];
  
  

  


}

 

 

∇Looping-forEach

 

여기서 Loopint-forEach를 만들어주면,

 

void main() {
  
  //Looping
  //Mapping
  //Reduce
  //Fold
  
  
  List<String> newjeans = [
    '민지',
    '하니',
    '해린',
    '혜인',
      '다니엘'
  ];
  
  
  //Looping - forEach
  //리스트의 내부 메소드.
  
  
  //메소드안에 함수와 파라미터를 받는게 가능.
  newjeans.forEach((value){
        print(value);
    
  });
  


}

메서드 forEach안에 파라미터(value)를 넣어주고 프린트를 찍어주면

 

List에 담긴 값들이 출력이 됩니다.

 

for문처럼, 값을 돌아가면서 뽑아오는데, value라는 파라미터 값으로 담아서 print해준다고 이해했습니다.

 

 

 

∇Map.

-map은 forEach와 다르게 리턴값을 받을 수 있습니다.

  final newList = newjeans.map((value){
    
    
  });

 

map을 통해 리스트의 값을 리턴하게 되면

각각 리스트의 값이 새로운 값으로 대체되게 됩니다.

 

예시를 들자면,

 

void main() {
  
  //Looping
  //Mapping
  //Reduce
  //Fold
  
  
  List<String> newjeans = [
    '민지',
    '하니',
    '해린',
    '혜인',
      '다니엘'
  ];
  
  
  //Looping - forEach
  //리스트의 내부 메소드.
  
  
  //메소드안에 함수와 파라미터를 받는게 가능.
  newjeans.forEach((value){
        print(value);
    
  });
  
  for(String value in newjeans) {
    print(value);  }
  
  
  print('-----------');
  

  //Mappint - map
  
  final newList = newjeans.map((value){
    
     return '제 이름은 $value입니다.';
  });
  
  print(newList);

}

이렇게 코드를 구성했을 때

 

이렇게 새롭게 구성된 값을 결과값으로 리턴하는 것을 볼 수 있습니다.

 

물론, 기존의 리스트는 변경이 없습니다.

void main() {
  
  //Looping
  //Mapping
  //Reduce
  //Fold
  
  
  List<String> newjeans = [
    '민지',
    '하니',
    '해린',
    '혜인',
      '다니엘'
  ];
  
  
  //Looping - forEach
  //리스트의 내부 메소드.
  
  
  //메소드안에 함수와 파라미터를 받는게 가능.
  newjeans.forEach((value){
        print(value);
    
  });
  
  for(String value in newjeans) {
    print(value);  }
  
  
  print('-----------');
  

  //Mappint - map
  
  final newList = newjeans.map((value){
    
     return '제 이름은 $value입니다.';
  });
  
  print(newList);
  
  print(newjeans);

}

 

 

 

∇Reduce/Fold.

  Reduce와 Fold도 리턴값을 각각 돌려받습니다.

 

 

     √ Fold 메서드는 Dart의 리스트나 이터러블 객체를 이용하여 값을 누적하는데 사용됩니다.

          초기값과 함께 주어진 함수를 사용하여 각 요소를 처리하고 누적된 값을 반환합니다.

 

          fold의 형태는

         fold(시작할 값, (이전 리턴 계산 값을 담는 파라미터, 현재 집어넣고 있는 값의 파라미))

 

  //Reduce/Fold  -reduce, fold
  
  
  List<int> numbers = [
    1,2,3,4,5 ];
  
  int total = numbers.fold(0,(total,element){
    return total + element;
  });
  
  print(total);

 

 

    fold와 유사하지만, reduce는 초기값을 사용하지 않고 리스트의 첫 번째 요소부터 시작하여 각 요소를 처리하고 누적된 값을 반환합니다.

 

        reduce((이전에 리턴한 값, 현재 집어넣는 값))

 

    int total2 = numbers.reduce((total,element){
      
      return total+element;
    });
  
  print(total2);

 

 

실행하면 total의 첫번째 값이 들어가서 진행됩니다.

 

 reduce가 fold와 다른점은,   반환값은 인수와 같은 타입이어야 합니다.

타입들이 다르면 reduce를 사용할 수 없습니다.

 

  List<String> names = [
    '코드팩토리',
    '레드벨벳',
    'BTS'
    
  ];
  
  
  int total3 = names.fold(0,(total,element){
    return total + element.length;
  });
  
  print(total3);
  
  final total4 = names.reduce((total, element){
    return total + element.length;  });
  
  
  
}

이런식으로 코드를 구성했을 때 

fold는 정상 실행이 되지만,

 

reduce에서

이처럼 타입이 맞지 않다는 오류가 발생합니다.

 

 

 


∇화살표함수 ( =>)

"=>" 는 Dart 언어에서 사용하고, 표현식을 오른쪽으로 실행하며 값을 반환하는 함수를 정의하는 방법입니다.

* 함수를 정의할 때 생기는 중괄호 {}를 없애고 사용합니다.

 

 

    int total2 = numbers.reduce((total,element){
      
      return total+element;
    });
  
  print(total2);
  
//화살표함수
  
     int total3 = numbers.reduce((total,element) => total+element);
  
    print(total3);
  
}

 

   

기존에 {}와 return을 적어주고 했던 것과 같은 결과값을 받을 수 있습니다.

 

단 화살표함수는 =>뒤에 오는 내용이 '한줄'로 끝나는 경우에만 사용이 가능합니다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.