플러터 Flutter
[Flutter/Drat]다트 유용한 메소드 Method 함수 Function 정리~
dev.mk
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
반응형