-
[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=¤tPage=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
반응형'플러터 Flutter' 카테고리의 다른 글
[Flutter] 플러터 Stateful Widget Lifecycle(생명주기)란?? (0) 2021.06.13 [Flutter] 플러터 코드에서 dispose() 메소드를 사용 하는이유?? (0) 2021.06.13 [Flutter]플러터 Futurebuilder / Streambuilder란?? (0) 2021.05.30 [Flutter] 플러터 Text 텍스트 위젯(TextSpan, RichText Text.rich ) (0) 2021.05.02 [Flutter] Image 이미지 box.fit 옵션 정리 (1) 2021.04.25