본문 바로가기
Frontend, Client/Flutter

[Flutter] 플러터 - 다트 : 리스트(List) 다양한 기능 알아보기

by ggyongi 2022. 12. 9.
반응형

아주 기본적인 리스트 개념은 생략하고, 다트에서 제공하는 리스트의 다양한 기능을 알아보자.

 

spread operator

var b = [4, 5];
var a = [1, 2, 3, ...b];  // a = [1,2,3,4,5]가 됨
assert(a[3] == 4);
assert(a[4] == 5);


null-aware spread operator

아래 코드에서 변수 list가 null이면 아무것도 추가되지 않는다.

var list2 = [0, ...?list];
assert(list2.length == 1);


collection if

리스트 안에서 if를 사용할 수 있다.

var flag = true;
var a = [1, 2, if(flag) 3];
print(a); //[1, 2, 3]


collection for

var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var even_square = [for(var i in nums) if(i%2==0) i*i];
print(even_square); //[4, 16, 36, 64, 100]


reduce
map, filter는 많이 사용을 해봤지만 reduce는 새롭게 알게 되어 정리한다. reduce는 익명함수의 리턴 값을 그 다음 함수 실행할 때 첫번째 인자로 넘겨준다.
그렇기 때문에 이 함수가 정상 작동하려면, lst 각 인자의 타입과 result 타입이 일치해야 한다.

var lst = ['a', 'b', 'c', 'd', 'e'];
var result = lst.reduce((v1, v2) => v1 + v2);
assert(result == 'abcde');


fold
reduce와 비슷하지만, reduce처럼 타입을 맞추지 않아도 된다.
fold 함수에는 첫번째 인자를 지정해줄 수 있는데 첫 함수를 실행할 때 이 값이 첫번재 인자로 들어가고 리스트의 첫번째 인자가 두번째 인자로 들어간다.
반환타입을 명시하기 위해 fold에 제네릭으로 타입을 명시하면 된다.

var lst = ['1', '2', '3', '4', '5'];
var result = lst.fold<int>(0, (v1, v2) => v1 + int.parse(v2));
assert(result == 15);

 

다트 언어 공식문서 : https://dart.dev/guides/language/language-tour

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글