티스토리 뷰
컬렉션
다트는 리스트(List), 셋(Set), 맵(Map) 컬렉션을 기본으로 지원한다.
리스트(List)
다트에서 여러 개의 값을 가지는 배열인 리스트(list)를 제공한다. 리스트 리터널은 대괄호([ ])로 둘러싸인 쉼표로 구분된 식 또는 값 목록으로 표시된다.
var list = [1, 2, 3];
위의 코드에서 list 변수는 List<int> 타입으로 추론된다. 만일 선언 이후 list에 int가 아닌 값을 추가하면 에러가 발생한다.
리스트의 마지막 아이템에 콤마를 추가할 수 있다. 마지막 콤마는 아무런 의미가 없다. 이 콤마는 다음 아이템을 추가할 때 콤마를 빼먹지 않을 수 있기 때문에 에러를 방지한다.
var list2 = [
'Car',
'Boat',
'Plane',
];
리스트의 인덱스는 0부터 시작된다. length 프로퍼티를 사용하여 리스트의 길이를 얻을 수 있다. 그러므로 인덱스 0은 첫 아이템이 되고, list.length - 1은 마지막 아이템이 된다.
리스트의 서브스트립트 연산자([ ])를 사용하여 리스트의 값에 접근할 수 있다.
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);
const를 사용해서 컴파일-타임 상수인 리스트를 만들 수 있다.
var constantList = const [1, 2, 3];
constantList[1] = 1; // 에러 발생, constantList의 값은 const [1, 2, 3]이므로 값을 바꿀 수 없다.
셋(Set)
다트의 셋은 순서가 없고, 유일한 항목들의 모음이다. 다트는 셋 타입과 셋 리터럴을 통해 셋을 만들 수 있다.
다음은 셋 리터럴을 이용해서 만든 셋이다. halogens 변수의 타입을 Set으로 추론된다.
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
// halogerns는 Set<String> 타입이다.
빈 셋을 만들려면, 타입 인수와 {}를 사용하거나, Set 타입의 변수에 {}를 할당하면 된다.
var names1 = <String>{}; // 빈 Set
Set<String> names2 = {}; // 빈 Set
var names3 = {}; // Set이 아닌 Map<dynamic, dynamic>이다.
맵 리터럴은 셋 리터럴과 유사하다. 그러나 맵 리터럴이 먼저 나왔기 때문에 {}는 기본적으로 맵 타입이 된다.
아이템을 추가하려면 add()와 addAll() 메서드를 사용하면 된다.
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
length을 사용해서 아이템 갯수를 얻을 수 있다.
assert(elements.length == 5);
const를 사용해서 컴파일-타임 상수를 만들 수 있다.
final constantSet = const {
'fluorine',
'chlorine',
'bromine',
'iodine',
'astatine',
};
// constantSet.add('helium'); // This line will cause an error.
맵(Map)
맵은 키와 값을 연결하는 컬렉션이다. 키와 값은 모든 타입이 될 수 있다. 각 키는 유일해야 하지만 값을 중복이 되어도 된다.
맵은 맵 타입과 맵 리터럴로 만들 수 있다. 다음은 맵 리터럴을 사용하여 만든 예제이다. gifts는 Map<String, String> 타입이고, nobleGases는 Map<int, String> 타입이 된다.
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
다음처럼 기존 맵에 새로운 키-값 쌍을 추가할 수 있다.
gifts['fourth'] = 'calling birds'; // 키-값 쌍 추가
대괄호([ ])와 키를 사용해서 값을 검색할 수 있다.
assert(gifts['first'] == 'partridge');
맵에서 존재하지 않는 키를 조회하면 null을 반환한다.
assert(gifts['five'] == null);
length를 사용하여 키-값 쌍의 개수를 얻을 수 있다.
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);
컴파일-타임 상수 맵을 생성하려면 const를 사용하자.
final constantMap = const {
2: 'helium',
10: 'neon',
18: 'argon',
};
// constantMap[2] = 'Helium'; // 이 줄은 오류를 발생시킵니다.
스프레드 연산자
컬렉션에 스프레드 연산자(...)와 널 안전 스프레드 연산자(...?)를 사용할 수 있다. 스프레드 연산자는 여러 값을 컬렉션에 삽입하는 방법이다.
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
만약 스프레드 연산자의 오른쪽 표현식이 null일 수 있는 경우, 널 안전 스프레드 연산자(...?)를 사용하여 에러를 방지할 수 있다.
var list2 = [0, ...?list];
assert(list2.length == 1);
컨트롤-제어 연산자
컬렉션에 컨트롤-제어 연산자인 컬렉션 if와 컬렉션 for를 제공한다. 이 연산자를 사용하여 조건부와 반복을 활용하여 컬렉션을 구성할 수 있다.
다음은 컬렉션 if를 사용하여 promoActive에 따라서 항목의 수가 3개이거나 4개가 되는 리스트를 생성하는 예제가 된다.
var promoActive = true;
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];
if-case도 지원한다.
var login = 'Manager';
var nav = [
'Home',
'Furniture',
'Plants',
if (login case 'Manager') 'Inventory'
];
다음은 컬렉션 for를 사용하여 리스트의 항목을 조작한 후 다른 리스트에 추가하는 예제이다.
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');
'다트 공식 문서 번역' 카테고리의 다른 글
다트] 타입 별칭, 인라인 함수 타입 (0) | 2024.07.24 |
---|---|
다트] 제네릭 (0) | 2024.07.24 |
다트] 레코드 - 구문, 필드, 타입, 동등성, 집합 반환 (0) | 2024.07.22 |
다트] 함수, 화살표 구문, 매개변수, 익명 함수, 렉시컬 스코프, 렉시컬 클로저, tear-off, 반환 값, 제너레이터, 외부 함수 (0) | 2024.07.20 |
다트] 내장 타입 - 숫자, 문자열, 불리언, 룬과 그래프 클러스터, 심볼 (0) | 2024.07.20 |