ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Flutter/Drat]다트 유용한 메소드 Method 함수 Function 정리~
    플러터 Flutter 2021. 6. 12. 20:23
    반응형

    Dart에서는 iterable이라는 개념이 있다. 이것은 반복이 가능한 그룹을 뜻하고

    iterable?
    A collection of values, or "elements", that can be accessed sequentially.

    list나 array, 등을 의미한다. Map은 순서가 없기 때문에  iterable이 아니다. 

    하지만 linked Map은 순서가 있으니 iterable이다.

    - 배열의 복사 방법

    var list = [1, 2, 3, 4];
    
    // 얕은(주소) 복사 (값이 복사되는게 아니라 원래 래퍼런스를 참조해서 map안의 함수가 연산되서 결과가 나옴)
    var newList = list;
    print(newList);  // [1, 2, 3, 4]
    
    // 깊은 복사 ( 스프레드(흩뿌리다) 연산자 )
    var spreadList = [10, ...list, 100];
    
    print(spreadList);  //[10, 1, 2, 3, 4, 100]
    
    
      

     

    - map

    map 메소드는 iterable(배열그룹)를을 대상으로 foreach돌린다.

    main() {
      var list = [1, 2, 3];  	
      var newList = list.map((e) => e + 1);  //자신에게 1을 더한다.
      print(list); //[1, 2, 3]
      print(newList);  //(2, 3, 4)
      
      list[0] = 0;
      
      print(list); //[0, 2, 3]
      print(newList); //(1, 3, 4)
    
    
    }
    

     

     

    - asMap 

    배열 값에 Index 키 값을 삽입해줘서 반환해준다. 

    키값은 인덱스로 부여된다. 0 부터시작

    void main() {
    
    	var words = ['fee', 'fi', 'fo', 'fum'];
    	var map = words.asMap();  // {0: fee, 1: fi, 2: fo, 3: fum}
    
      	print(map[0] + map[1]); //feefi
      	print(map); //{0: fee, 1: fi, 2: fo, 3: fum}
      	print(map.keys.toList()); // [0, 1, 2, 3]
      
    }
    

     

    - toList

    생성되는 값들을 리스트로 만들어 반환

     Dart의 List는 매개변수, '= '등 으로 전달시 메모리 주소 값으로 전달되어

    이름이 다르더라도 한 곳에서 요소를 변경하면 모두 다 변경된다. 그래서 toList 사용!

    void main() {
      List orderList = [1,2,3];
      //toList()를 사용한다
      List zeroList = orderList.toList();
      
      for(int i=0 ; i < zeroList.length; i++){
        zeroList[i] = 0;
      }
      print(orderList.toString()); //원본 배열의 값이 변경되지 않는다.
    }

     

    - where

    배열요소를 필터링한다.

    main() {
      var list = [1,2,3,4];
      var filterList = list.where((e) => e != 3);  //배열중에서 3이 아닌값만 필터한다.
      print(filterList); //[1,2,4];
      
    }
    

     

    - for or foreach

    배열요소를 반복한다.

    main() {
      
      var list = [1,2,3,4];
     // for in 문 (list라는 배열의 끝까지 돈다.)
      for (var e in list) {
        print(e);
        //1
        //2
        //3
        //4
      }
    
    
      // forEach 문-
      list.forEach((e) => print(e));
      //1
      //2
      //3
      //4
    
    
    }
    

     

    - add , addAll , length , clear

    main() {
    
      // list 생성자 사용 
      var vegetables = List();
    
      // 문자열을 사용하여 list 생성
      var fruits = ['apples', 'oranges'];
    
      // list에 값 추가하기 
      fruits.add('kiwis');
      print(fruits); //[apples, oranges, kiwis]
    
      // list에 목록 다수의 항목 추가하기 
      fruits.addAll(['grapes', 'bananas']);
      print(fruits); //[apples, oranges, kiwis, grapes, bananas]
    
      // list의 길이 가져오기 
      print(fruits.length); //5
      
      // 리스트 단일항목 삭제 
      var appleIndex = fruits.indexOf('apples');
      fruits.removeAt(appleIndex);
      print(fruits); //[oranges, kiwis, grapes, bananas]
      
      // list 의 모든 항목 삭제 
      fruits.clear();
      print(fruits); //[]
    
    }

     

    - sort

    list 의 정렬을 위한 sort() 메소드
    sort() 메소드를 통해 값을 정렬 할 수 있다. 반환값은 0보다 작거나, 0이거나, 0보다 커야 되며 해당 값을 기준으로 정렬 한다.. 문자열을 비교하는 경우는 compareTo() 메소드를 사용

    main(){  
      // list 정렬 
      var sortFruits = ['b', 'bananas', 'apples', 'oranges' , 'app'  'az','abbb', 'a' ,'c'];
      sortFruits.sort((a, b) => a.compareTo(b));
      print(sortFruits); //[a, abbb, appaz, apples, b, bananas, c, oranges]
    }

     

    - firstWhere

    요소를 반복하고 주어진 조건의 첫번째 요소를 반환한다.

    bool predicate(String element) {
      return element.length > 5;
    }
    
    main() {
      var items = ['Salad', 'Popcorn', 'Toast', 'Lasagne'];
      
      // 람다식 문법
      var element1 = items.firstWhere((element) => element.length > 5);
      print(element1); //Popcorn
      
      //리턴형 문법
      var element2 = items.firstWhere((element) {
        return element.length > 5;
      });
      print(element2); //Popcorn
      
      var element3 = items.firstWhere(predicate);
      print(element3); //Popcorn
      
      var element4 = items.firstWhere(
        (element) => element.length > 10,
        orElse: () => 'None!',
      );
      print(element4); //None!
    }

    firstWhere 랑 indexWhere의 차이점? 

    firstWhere 요소를 반환하고 indexWhere 일치하는 테스트의 인덱스를 반환한다.

     

    - lastWhere

    요소를 반복하고 주어진 조건의 마지막 요소를 반환한다.

     

    - fold

    배열의 조건을 누적시켜 반환한다.

    main() {
      
      List<int> numbers = [0,1,2,3,4,5];
      
      int sum = numbers.fold(0,(total,element){
        //첫번째 시작할 값, total은 이전에 리턴해 준 값이다.
        //(중괄호(기능수행영역)안에서 반복함)
        return total+element;
      });
      
      print(sum); //15
    }
    
    // 문법이 진행되는 과정
    // index = 0
    // element = 0
    // vTotal = 0
    // return = 0 + 0 = 0
      
    // index = 1
    // element = 1
    // vTotal = 0
    // return = 0 + 1 = 1
      
    // index = 2
    // element = 2
    // vTotal = 1
    // return = 1 + 2 = 3
      
    // index = 3
    // element = 3
    // vTotal = 3
    // return 3 + 3 = 6

    index는 numbers 값의 인덱스값이며, 첫번째 파라미터 0번부터 element자리에  numbers값을 할당하며 반복된다.

    그리고 total 파라미터 자리엔 이전에 리턴받은 결과값이 누적되는 방식이다.

     

    - reduce

    사용방식은 fold와 큰 차이가 없고 fold에서는 시작값인 0을 지정하는데, reduce에서는 생략한다.

    main() {
      
      List<int> numbers = [0,1,2,3,4,5];
      
      int sum = numbers.reduce((total,element){
        return total+element;
      });
      
      print(sum); //15
      
      
      //람다식 간소화
      int sum2 = numbers.reduce((total, element) => total + element);
      print(sum2); //15
    }
    
    

     

    본문의 참조

    https://api.flutter.dev/flutter/dart-core/Iterable/map.html

    https://blog.naver.com/PostView.nhn?blogId=getinthere&logNo=222161842230&categoryNo=34&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView 

    https://steemit.com/dart/@wonsama/flutter-2-a-tour-of-the-dart-libraries

    https://masswhale.tistory.com/entry/Dart%EC%96%B8%EC%96%B4%EA%B3%B5%EB%B6%80-25List-%EC%8B%AC%ED%99%94-forEach-map-reduce-fold

    반응형

    댓글

Designed by Tistory.