형변환
asMap() : map 형식으로 변환
toSet() : set형식으로 변환(중복제거)
toList() : list형식으로 변환
Set.from(변수) : List로 set을 만드는 법;
// Iterable형태 : ('값1','값2','값3')의 형식. 잘 쓰지 않음(toList()로 변경해서 사용)
map
- for문처럼 사용 가능
- 원본은 보존해고 새로운 리스트로 나옴
List<String> testList = ['일','이','삼'];
final newList = testList.map((e){
return '$e번';
});
// 화살표함수
final newList2 = testList.map((e)=>'$e번');
mpa활용
1. map형태(키,값) 그대로 받아오기
- MapEntry로 map전체 받아오기
- keys.map / values.map으로 따로 받아오기
Map<String, String> fruits = {'apple': '사과', 'banana': '바나나', 'kiwi': '키위'};
final newFruits = fruits.map((e, k) => MapEntry('(EN)$e', '(KO)$k'));
final enFruits = fruits.keys.map((en) => '영어:$en');
final koFruits = fruits.values.map((ko) => '한국어:$ko').toList();
split
- 문자를 리스트 형태로 변경
String number = '146298';
final par = number.split('').map((x)=>'$x.jpg');
print(par.toList());
set
Set fruitsSet = {'apple', 'banana', 'kiwi'};
final newSet = fruitsSet.map((f)=>'과일$f').toSet();
where
- 원하는 조건대로 필터링해서 리턴
List<Map<String,String>> movie = [
{
'title' : '센치행',
'team' : '지브리'
},
{
'title' : '겨울왕국',
'team' : '디즈니'
},
{
'title' : '주토피아',
'team' : '디즈니'
},
{
'title' : '포뇨',
'team' : '지브리'
},
];
final disney = movie.where((m)=>m['team']=='디즈니');
final ghibli = movie.where((m)=>m['team']=='지브리');
reduce
- 리스트를 전부 더하여 리턴, 리턴 타입은 최초 리스트와 같은 타입
- 2개의 파라미터 받음
List<int> num = [1,3,6,4,8];
final newNum = num.reduce((prev,next)=> prev+next);
List<String> text = ['안녕하세요','저는','퇴근하고싶어요'];
final newText = text.reduce((p,n)=>p+n);
fold
- reduce와 달리 다른 타입 받을 수 있음(다른 타입을 받으려면 명시해줘야함)
- 글자의 길이도 측정 가능(string의.length)
- 최초값 필요(최초값은 반환받는 타입과 같아야함)
List<int> num = [1,2,3,4];
final newnum = num.fold(0,(p,n)=>p+n);
List<String> text = ['안녕하세요 ','저는 ','퇴근하고싶어요 '];
final newText = text.fold<String>('',(p,n)=>p+n);
cascading operator
- 인스턴스 속성이나 함수를 연속해서 사용할 수 있게 하는 연산자
- 리스트 안에 값을 풀어서 넣음
- 형태는 같아도 새로운 리스트라 비교하면 false 반환
- ... 으로 사용
List<int> even = [2,4,6,8];
List<int> odd = [1,3,5,7];
print([even,odd]); // [[2, 4, 6, 8], [1, 3, 5, 7]]
print([...even,...odd]); // [2, 4, 6, 8, 1, 3, 5, 7]
print(even == [...even]); // false
실제 사용 예시
- map을 구조화해서 오타 등 휴먼에러 방지(데이터의 신뢰도 높여줌)
void main(){
// 기본 map
void main(){
final List<Map<String,String>> movie = [
{
'title' : '센치행',
'com' : '지브리'
},
{
'title' : '겨울왕국',
'com' : '디즈니'
},
{
'title' : '주토피아',
'com' : '디즈니'
},
{
'title' : '포뇨',
'com' : '지브리'
},
];
final eachMovie = movie.map(
(m) => Movie(
title: m['title']!, // !를 붙여서 무조건 존재함을 명시
com: m['com']!
)
).toList();
print(eachMovie);
}
class Movie{ // 형태 명시
final String title;
final String com;
Movie({ // 필수키
required this.title,
required this.com
});
String toString(){
return '영화제목: $title, 제작사: $com ';
}
}
// void main()안에 작성
// 활용1 : 제목만 출력
for(Movie mTitle in eachMovie){
print(mTitle.title);
}
// 활용2 : 필터링
final disney = eachMovie.where(
(d) => d.com =='디즈니'
).toList();
for(Movie dMovie in disney){
print(dMovie.title);
}
// 연결해서 사용 가능
final linkList = movie.map(
(m) => Movie(
title : m['title']!,
com : m['com']!
)
).where((x)=> x.com == '디즈니');
print(linkList);
'공부 > Dart & Flutter' 카테고리의 다른 글
다트 기초 - OOP(객체지향 프로그래밍) (1) | 2024.12.03 |
---|---|
다트 기초 (0) | 2024.11.27 |
댓글