본문 바로가기
Hybrid/Flutter

Dart] 2. Collection

by 김마리님 2024. 6. 14.

1. List

설명은 print에 달린거 읽어보면 됨! ㅇ.<

void main() {
  List<String> btob = ['이민혁', '프니엘', '이창섭', '서은광', '임현식', '육성재'];
  
  print("$btob // 리스트 출력");
  print("${btob[0]} // 인덱스 출력");
  print("${btob.last} // first, last 사용가능");
  print("${btob.length} //  길이 출력 가능");
  
  print("");
  
  btob[3] = '서리다'; 
  print("$btob // 인덱스를 찾아 변경 가능");
  
  btob.add('멜로디'); 
  print("$btob // 배열의 마지막에 값 추가");
  btob.remove(btob.last);
  print("$btob // 배열의 마지막에 값 삭제");
  
  print("");
  
  var rapper = btob.where(
    (name) => name == '이민혁'|| name == "프니엘"
  ); // 특정값 필터링
  print("$rapper // 특정값 필터링 + iterable 자료형 출력");
  print("${rapper.toList()} // iterable -> list 자료형으로 변경 출력");

  print("");
  
  var btobMember = btob.map(
    (name) => '비투비 $name'
  ); 
  print("$btobMember // 배열을 순회하며 값에 간섭");
  
  print("");
  
  var btobString = btob.reduce((value, element) => value + ", " + element);
  print("$btobString // reduce가 처음 시작될때 value가 첫번째 요소, element 가 두번째 요소임. 다음 순회할때 value는 reduce의 이전 순회값, element는 다음값임. 이런 식으로 점점 중첩됨 ");
  
  print("");

  
  var allMember = btob.fold<int>(0, (value, element) => value + element.length);
  print("$allMember // reduce는 내부 리스트 타입이 같아야 하지만, fold는 타입이 달라도 반환이 가능하다. 예제에선 배열 내부가 string이라 reduce는 string 타입으로만 반환되어야 하지만, fold는 앞에 반환될 자료형(int)를 선언하고 초기값(0)을 설정한 뒤 각 요소의 길이를 더하도록 함.");
  
}

 

이의 결과값을 다음과 같다.

뒤에 달린 // 내용보고 매칭해서 공부하면 된다.

[이민혁, 프니엘, 이창섭, 서은광, 임현식, 육성재] // 리스트 출력
이민혁 // 인덱스 출력
육성재 // first, last 사용가능
6 //  길이 출력 가능

[이민혁, 프니엘, 이창섭, 서리다, 임현식, 육성재] // 인덱스를 찾아 변경 가능
[이민혁, 프니엘, 이창섭, 서리다, 임현식, 육성재, 멜로디] // 배열의 마지막에 값 추가
[이민혁, 프니엘, 이창섭, 서리다, 임현식, 육성재] // 배열의 마지막에 값 삭제

(이민혁, 프니엘) // 특정값 필터링 + iterable 자료형 출력
[이민혁, 프니엘] // iterable -> list 자료형으로 변경 출력

(비투비 이민혁, 비투비 프니엘, 비투비 이창섭, 비투비 서리다, 비투비 임현식, 비투비 육성재) // 배열을 순회하며 값에 간섭

이민혁, 프니엘, 이창섭, 서리다, 임현식, 육성재 // reduce가 처음 시작될때 value가 첫번째 요소, element 가 두번째 요소임. 다음 순회할때 value는 reduce의 이전 순회값, element는 다음값임. 이런 식으로 점점 중첩됨 

18 // reduce는 내부 리스트 타입이 같아야 하지만, fold는 타입이 달라도 반환이 가능하다. 예제에선 배열 내부가 string이라 reduce는 string 타입으로만 반환되어야 하지만, fold는 앞에 반환될 자료형(int)를 선언하고 초기값(0)을 설정한 뒤 각 요소의 길이를 더하도록 함.

 

 

2. Map

Map.. Java랑 Kotlin이랑 똑같음 ,,

void main() {
  Map<String, String> seoulTrans = {
    '기차' : '서울역',
    '버스' : '고속터미널',
    '비행기' : '김포공항',
  }; 
  
  print("${seoulTrans['기차']} // key값으로 value를 찾을 수 있음.");
  print("${seoulTrans.keys} // key list 반환");
  print("${seoulTrans.values} // value list 반환");

}
서울역 // key값으로 value를 찾을 수 있음.
(기차, 버스, 비행기) // key list 반환
(서울역, 고속터미널, 김포공항) // value list 반환

 

 

3. Set

얘도.. 기존 언어랑 비슷.

void main() {
  Set<String> delivery = {'햄버거', '떡볶이', '피자', '마라탕', '마라탕',};
  
  print("$delivery // 겹치는 값은 저징되지 않음");
  print("${delivery.contains('콘치즈')} // set 내부에 값 있는지 확인");
  print("${delivery.toList()} // list 변환");
  
  print("");
  
  List<String> cafe = ['아메리카노', '카페라떼', '핫초코', '핫초코'];
  print("$cafe // list는 중복을 허용함");
  print("${Set.from(cafe)} // List -> Set 변경. 이 과정에서 중복 삭제");
  
}
{햄버거, 떡볶이, 피자, 마라탕} // 겹치는 값은 저징되지 않음
false // set 내부에 값 있는지 확인
[햄버거, 떡볶이, 피자, 마라탕] // list 변환

[아메리카노, 카페라떼, 핫초코, 핫초코] // list는 중복을 허용함
{아메리카노, 카페라떼, 핫초코} // List -> Set 변경. 이 과정에서 중복 삭제

 

 

4. enum

enum은 값을 여러 케이스로 제한해 두는 것이다. 실무로 들어가서 상태를 조작한다거나 할때 정말정말 편하다.

enum Status {
    onCreate,
    onStart,
    onResume,
    onPause,
    onStop,
    onDestroy
}
  
void main() {
  var status = Status.onCreate;
  print("$status // 다음과 같이 바로 골라쓸 수 있고 자동완성 됨.");
  print("${Status.values} //enum에 존재하는 값 확인 가능");
}
Status.onCreate // 다음과 같이 바로 골라쓸 수 있고 자동완성 됨.
[Status.onCreate, Status.onStart, Status.onResume, Status.onPause, Status.onStop, Status.onDestroy] //enum에 존재하는 값 확인 가능

 

반응형

'Hybrid > Flutter' 카테고리의 다른 글

Flutter] 백버튼 이벤트 처리  (0) 2024.07.04
Dart] 1. 기초문법  (0) 2024.06.13