Overview. 다트에서 제공하는 컬렉션
List , Map , Set 을 지원한다.
- List
- Map
- Set
1. List 자료구조
List는 데이터의 중복이 가능하고 순서가 있는 자료를 담는 컬렉션입니다. 자료는 순차적으로 index(번호)를 생성하여 쌓이게 됩니다. 이때 <> 타입을 사용하게 되는데 제네릭 타입이라고 합니 다. 제네릭 타입이 처음인 분들은 크게 신경 쓰지 않아도 됩니다. 이유는 Dart는 타입 추론을 제공하 기 때문에 var로 선언할 수 있습니다.
모든 인덱스 번호는 0번부터 시작합니다.
결론 : 타입 지정 또는 추론을 지원한다.
타입 지정
List<int> nums = [1,2,3,4];
타입 추론
var nums = [1,2,3,4];
인덱스 연산자를 활용해 값을 꺼낼수 있습니다.
print(nums[0]);
print(nums[1]);
print(nums[2]);
print(nums[3]);
print(nums[4]);
2. Map 자료구조
Map은 키(key)와 값(value)의 쌍으로 이루어진 컬렉션입니다. List는 index 번호로 값을 찾지만 Map은 키(key)로 값을 찾아냅니다.
그리고 key 연산은 인덱스 연산자를 사용합니다.
Map 자료구조 초기화는 중괄호 ' {} '를 사용합니다.
// map 리터럴은 중괄호이다.
Map<String, dynamic> user = {
'id': 1,
'username': 'cos',
};
key 연산은 인덱스 연산자를 사용합니다.
// key 연산은 인덱스 연산자를 활용합니다.
print(user['id']);
print(user['username']);
}
3. Set 자료구조
집합을 표현하는 컬렉션입니다. 데이터의 중복이 허용되지 않기 때문에 로또 번호 생성기등을 만들 때 유용하게 사용할 수 있습니다. 그리고 List와는 다르게 Set은 순서가 없습니다.
Set 자료구조 초기화는 중괄호 ' {} '를 사용합니다.
import 'dart:math'; // 다트에서 기본적으로 제공하는 라이브러리
// set 리터럴은 중괄호를 사용합니다.
Set<int> lotto = {};
Random r = Random();
while (lotto.length < 6) {
lotto.add(r.nextInt(45) + 1); // 1 ~ 45
}
만약에 Set 자료구조를 다른 컬렉션 자료구조로 바꿀 수 있을까?
가능합니다!!
List<int> lottoList = lotto.toList();
print(lottoList);
꽤나 유연한 구조를 갖고 있군요!! 물론 Map 구조는 안되겠죠 ㅎㅎ..
4. 연산자
map() 함수
List 와 같은 iterable 객체들은 map() 함수들을 지원하는 데요
// list --> map() 함수가 있다.
// map -> 반복되는 값을 하나씩 변형하기 위해 사용합니다.
var chobab = ['새우초밥', '광어초밥', '연어초밥'];
var chobabChange = chobab.map((i) => "간장 " + i);
print(chobabChange);
print(chobabChange.runtimeType);
결과 : (간장 새우초밥, 간장 광어초밥, 간장 연어초밥)
결과 : MappedListIterable<String, String>
다만 MappedListIterable 이라는 자료형으로 바뀌는 것을 알수 있습니다. 따라서 toList() 를 사용해 List 형식으로 바꿔주면 됩니다.
print(chobabChange.toList());
where () 연산자
흔히 저희가 알고있는 filter() 함수와 같습니다.
반복되는 값에서 필요없는 값을 필터링 하거나 , 필요한 값을 찾을 때 사용합니다,.
//where 연산자
// 반복되는 값에서 필요없는 값을 필터링 하거나 , 필요한 값을 찾을 때 사용합니다.
var chobab = ['새우초밥', '광어초밥', '연어초밥'];
var chobabChange = chobab.where((i) => i != '광어초밥');
print(chobabChange2.runtimeType); // 타입 확인
print(chobabChange2.toList());
결과 : WhereIterable<String>
결과 : [새우초밥, 연어초밥]
'flutter & dart' 카테고리의 다른 글
flutter & dart - MainAxisAlignment , CrossAxisAlignment (0) | 2024.02.14 |
---|---|
flutter & dart - 폰트 (font) (0) | 2024.02.13 |
flutter & dart - 추상 클래스 , 동적 바인딩 (1) | 2024.02.06 |
flutter & dart - 상속 , 다형성 , 이니셜라이져 (0) | 2024.02.06 |
flutter & dart - late , final , const (0) | 2024.02.06 |