[Dart] Dart 언어 기초 문법 - (2)컬렉션
컬렉션
: 여러 값을 하나의 변수에 저장 가능한 타입
서로의 타입으로 자유롭게 형변환이 가능하다!
1) List - 여러 값을 순서대로 저장
2) Map - 특정 키 값 기반으로 빠르게 검색
3) Set - 중복된 데이터 제거시에 사용
* List 타입 :
여러 값을 순서대로 한 변수에 저장시에 사용
* 원소 : 리스트의 구성 단위
* <> : List에 넣을 타입 명시 가능
void main(){
List<String> blackPinkList = ['리사', '제니', '로제', '지수'];
}
// 첫 원소 : blackPinkLikst[0]
// 마지막 원소 : blackPinkList[3]
// 길이 반환 : blackPinkList.length
* List에서 자주 사용되는 함수 : add() / where() / map() / reduce()
* add() 함수 :
List에 값 추가할 때 사용, 추가하고 싶은 값을 매개변수에 입력
→ 리스트에 끝에 추가가 된다.
* where() 함수 :
List에 있는 값들 순회하면서 조건에 해당하는 값만 필터링
true 반환시 값 유지 / false 반환시 값 버림
void main(){
List<String> blackPinkList = ['리사', '지수', '로제', '제니'];
final newList = blackPinkList.where(
(name) => name == '지수' || name == '제니');
// List 에서 지수 or 제니 만 유지
print(newList); ---> // (리사, 지수)
}
* map() 함수
: List 에 있는 값들을 순서대로 순회하면서 값 변경 가능
기존 값을 하나씩 매개변수로 입력받음
반환하는 값이 현재값을 대체! → 순회가 끝나면 Iterable 반환
(Iterable 에서 List 타입 변환시에는 .toList() 함수 사용)
final newBlackPink = blackPink.map(
(name) => '블랙핑크 $name', );
print(newBlackPink)
);
// 리스트 모든 요소에 앞에 '블랙핑크' 추가
// 블핑 로제, 블핑 제니, ...~
- 컬렉션에 담긴 데이터를 반복해서 플러터에 담고 화면에 출력할시 많이 사용
- 컬렉션 담긴 데이터를 반복해서 플러터 위젯에 담는데, 데이터 조금씩 변형할 경우
많이 사용한다.
* reduce() 함수
: 역시 List 값들 순회하면서 매개변수에 입력된 함수 실행
순회할때마다 값을 쌓아가는 특징 有
다른 함수들과 달리 Iterable 타입 말고 List 타입을 반환한다!
또, 매개변수 2개를 입력받는다.
void main(){
List<String> blackPinkList = ['리사', '지수', ~];
final allMembers = blackPinkList.reduce((value, element)) => value + ', ' + element);
// 리사, 지수, 제니, 로제
// value + element, ...
// 요소들의 값을 한번에 더한 값이 됨!
}
* fold() 함수
: reduce() 함수와 실행 논리는 똑같지만, reduce() 함수는 리스트 요소들의 타입이 같아야하고,
반면 fold() 함수는 어떠한 타입이든 반환할 수 있다. (reduce 함수의 특이한 형태)
void main(){
List<String> blackPinkList = ['지수', '리사', ...];
final allMembers =
blackPinkList.fold<int>(0, (value, element) => value + element.length;
// 8 (0 + 2 + 2 + 2 + 2)
// 0 : 최초 순회 초깃값
//(value, element) : 기존 순회 초깃값
}
* Map 타입 :
키, 값 짝을 저장, 키를 이용해서 원하는 값 빠르게 찾는데 중점 有
Map<키의 타입, 값의 타입> 맵이름
void main(){
Map<String, String> dictionary = {
'Harry Potter' : '해리 포터',
'Ron Weasley' : '론 위즐리',
'Hermione Granger' : '헤르미온느 그레인저',
};
print(dictionary['Harry Potter']); //해리포터
print(dictionary['Ron Weasley']); //론 위즐리
}
* Set 타입 :
중복 없는 값들의 조합 (유일한 값들 존재 보장)
Set<타입> 세트이름
void main(){
Set<String> blackPink = {'로제', '제니', '지수', '리사', '리사'};
print(blackPink); // 중복 제거 : 로제, 제니, 지수 ,리사
print(blackPink.contains('로제')); // contains() 값이 있는지 확인 : true
print(blackPink.toList());
List<String> blackPink2 = ['로제', '지수', '지수'];
print(Set.from(blackPink2)); //중복 제거 : 로제, 지수
}
* enum 타입 :
한 변수의 값을 몇 가지 옵션으로 제한하는 기능 → 선택지가 제한적일 때 사용
- 자동 완성 지원
- 선택지 정의
가능하기 때문에 String 보다 유용하다~
enum Status{
approved,
pending,
rejected,
}
void main(){
Status status = Status.approved;
print(stats); //Status.approved
}
* .toList() : 리스트 타입으로 변환
* .keys.toList() / .values.toList() : Map 타입의 키, 값을 따로 리스트로
* Set.from() : 리스트 → Set 타입으로 변환