Flutter/Dart

[Dart] Dart 언어 기초 문법 - (2)컬렉션

jungha_k 2023. 6. 2. 14:50

컬렉션

: 여러 값을 하나의 변수에 저장 가능한 타입
서로의 타입으로 자유롭게 형변환이 가능하다!

 

 

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)
    );
    
    // 리스트 모든 요소에 앞에 '블랙핑크' 추가
    // 블핑 로제, 블핑 제니, ...~
  1. 컬렉션에 담긴 데이터를 반복해서 플러터에 담고 화면에 출력할시 많이 사용
  2. 컬렉션 담긴 데이터를 반복해서 플러터 위젯에 담는데, 데이터 조금씩 변형할 경우

    많이 사용한다.


* 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 타입으로 변환