- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 다트
- programmer
- dart
- swift 알고리즘
- 스위프트
- 정렬
- Design Pattern
- 디자인패턴
- 스위프트디자인패턴
- 정렬알고리즘
- 프로그래머스 레벨2
- 자료구조
- 정렬 알고리즘
- rxswift
- swift
- 디자인 패턴
- swift 코딩테스트
- Algorithm
- 코테
- 코딩테스트
- 프로그래머스
- 감성에세이
- 알고리즘
- 프로그래머스 swift
- sort
- coding test
- 프로그래머스 level1
- swift split
- datastructure
- programmers
Bill Kim's Life...
[Dart] Collection : List & Set & Map 본문
Dart 언어에서의 Collection에 대하여 살펴봅니다.
#. 구독 대상
- Dart 언어를 처음 접하시면서 공부해보고 싶으신 분
- 플러터(Flutter) 개발에 관심이 있어나 해보고 싶으신 분
- 멀티 플랫폼 모바일 앱 개발을 시작하고 싶으신 분
- 기타 소프트웨어 개발과 지식에 관심이 있으신 모든 분들
Collections
Dart에서는 기타 다른 언어들과 마찬가지로 다수의 자료에 대한 처리 및 관리를 위한 Collection 자료형 클래스를 제공합니다.
기본적으로 크게 아래의 3가지의 Collection 클래스를 제공합니다.
- List : 데이터의 순서가 있고 중복을 허용함(배열, Array)
- Set : 데이터의 순서가 없고 중복을 허용하지 않음
- Map : 키(Key)와 값(Value)로 구성된 클래스로서 키는 중복을 허용하지 않고 값은 중복을 허용함
그렇다면 코드 예제와 함께 위의 Collection에 대해서 하나씩 살펴보겠습니다.
List
// list 생성자 사용
var vegetables = List();
// 문자열을 사용하여 list 생성
var fruits = ['apples', 'oranges'];
// list에 값 추가하기
fruits.add('kiwis');
// list에 목록 다수의 항목 추가하기
fruits.addAll(['grapes', 'bananas']);
// list의 길이 가져오기
assert(fruits.length == 5);
// 리스트 단일항목 삭제
var appleIndex = fruits.indexOf('apples');
fruits.removeAt(appleIndex);
assert(fruits.length == 4);
// list 의 모든 항목 삭제
fruits.clear();
assert(fruits.length == 0);
// list의 항목 위치 찾기
assert(fruits.indexOf('apples') == 0);
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);
var constantList = const [1, 2, 3];
// constantList[1] = 1; // Uncommenting this causes an error.
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
var list;
var list2 = [0, ...?list];
assert(list2.length == 1);
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');
Set
var ingredients = Set();
ingredients.addAll(['gold', 'titanium', 'xenon']);
assert(ingredients.length == 3);
// 중복된 항목을 추가해도 해당 세트에는 변화가 없습니다.
ingredients.add('gold');
assert(ingredients.length == 3);
// 세트에서 항목 제거
ingredients.remove('gold');
assert(ingredients.length == 2);
var ingredients = Set();
ingredients.addAll(['gold', 'titanium', 'xenon']);
// 해당 set 이 해당 item을 포함하는지 점검
assert(ingredients.contains('titanium'));
// 해당 set 이 해당 item 목록을 모두 포함하는지 점검
assert(ingredients.containsAll(['titanium', 'xenon']));
var ingredients = Set();
ingredients.addAll(['gold', 'titanium', 'xenon']);
// 두 set 의 교집합 정보를 생성
var nobleGases = Set.from(['xenon', 'argon']);
var intersection = ingredients.intersection(nobleGases);
assert(intersection.length == 1);
assert(intersection.contains('xenon'));
var names = <String>{};
// Set<String> names = {}; // This works, too.
// var names = {}; // Creates a map, not a set.
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);
final constantSet = const {
'fluorine',
'chlorine',
'bromine',
'iodine',
'astatine',
};
// constantSet.add('helium'); // Uncommenting this causes an error.
Map
// map은 문자열을 주로 키값으로 사용합니다.
var hawaiianBeaches = {
'Oahu': ['Waikiki', 'Kailua', 'Waimanalo'],
'Big Island': ['Wailea Bay', 'Pololu Beach'],
'Kauai': ['Hanalei', 'Poipu']
};
// 맵은 생성자로 생성할 수 있습니다.
var searchTerms = Map();
// 맵은 파라미터 타입을 지정하여 특정 key, value 형태로 입력 받을 수 있습니다.
var nobleGases = Map<int, String>();
var nobleGases = {54: 'xenon'};
// 해당 키 값에 해당하는 값을 반환한다
assert(nobleGases[54] == 'xenon');
// 해당 map 이 해당 key 값을 가지고 있는지 점검
assert(nobleGases.containsKey(54));
// 해당 key값과 그것의 value를 제거한다
nobleGases.remove(54);
assert(!nobleGases.containsKey(54));
var hawaiianBeaches = {
'Oahu': ['Waikiki', 'Kailua', 'Waimanalo'],
'Big Island': ['Wailea Bay', 'Pololu Beach'],
'Kauai': ['Hanalei', 'Poipu']
};
// 해당 collection에 정의된 모든 key 정보를 반환(열거형)
var keys = hawaiianBeaches.keys;
assert(keys.length == 3);
assert(Set.from(keys).contains('Oahu'));
// 해당 collection의 값 목록을 반환(열거형)
var values = hawaiianBeaches.values;
assert(values.length == 3);
assert(values.any((v) => v.contains('Waikiki')));
var hawaiianBeaches = {
'Oahu': ['Waikiki', 'Kailua', 'Waimanalo'],
'Big Island': ['Wailea Bay', 'Pololu Beach'],
'Kauai': ['Hanalei', 'Poipu']
};
assert(hawaiianBeaches.containsKey('Oahu'));
assert(!hawaiianBeaches.containsKey('Florida'));
var teamAssignments = {};
teamAssignments.putIfAbsent(
'Catcher', () => pickToughestKid());
assert(teamAssignments['Catcher'] != null);
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair
var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');
var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);
final constantMap = const {
2: 'helium',
10: 'neon',
18: 'argon',
};
// constantMap[2] = 'Helium'; // Uncommenting this causes an error.
Collection 공통 메소드
// isEmpty, isNotEmpty
var coffees = [];
var teas = ['green', 'black', 'chamomile', 'earl grey'];
assert(coffees.isEmpty);
assert(teas.isNotEmpty);
// forEach
var teas = ['green', 'black', 'chamomile', 'earl grey'];
teas.forEach((tea) => print('I drink $tea'));
var hawaiianBeaches = {
'Oahu': ['Waikiki', 'Kailua', 'Waimanalo'],
'Big Island': ['Wailea Bay', 'Pololu Beach'],
'Kauai': ['Hanalei', 'Poipu']
};
hawaiianBeaches.forEach((k, v) {
print('I want to visit $k and swim at $v');
});
var teas = ['green', 'black', 'chamomile', 'earl grey'];
// map() 메소드는, 사용자가 반환 된 객체에서 항목을 요청할 때까지 함수가 호출되지 않습니다.
var loudTeas = teas.map((tea) => tea.toUpperCase());
loudTeas.forEach(print);
// 즉시 반영되도록 하고자 하는 경우에는 toList(), toMap() 메소드를 사용하면 됩니다.
var loudTeas = teas.map((tea) => tea.toUpperCase()).toList();
// where, any, every
var teas = ['green', 'black', 'chamomile', 'earl grey'];
// 카모마일은 디카페인 입니다.
bool isDecaffeinated(String teaName) =>
teaName == 'chamomile';
// where() 메소드는 해당 item을 가지고 처리한 결과가 true인 항목을 반환합니다.
// 하단의 단축 사용법을 잘 눈여겨 봅니다.(이런 형태를 자주 씁니다, 파라미터 생략 및 자동 대입)
var decaffeinatedTeas =
teas.where((tea) => isDecaffeinated(tea));
// or teas.where(isDecaffeinated)
// any() 메소드는 적어도 하나라도 만족시키면 true를 반환한다
assert(teas.any(isDecaffeinated));
// every() 메소드는 모든 항목이 모두 만족되면 true를 반환합니다.
assert(!teas.every(isDecaffeinated));
지금까지 Dart 언어에서의 Collection에 대해서 살펴보았습니다.
감사합니다.
[참고 자료(References)]
[1] A tour of the Dart language : dart.dev/guides/language/language-tour
[2] Dart Programming - Lists : www.tutorialspoint.com/dart_programming/dart_programming_lists.htm
[3] 다트 컬렉션(Dart Collection) : blockdmask.tistory.com/393brunch.co.kr/@mystoryg/129
[4] Dart : Collections : iosroid.tistory.com/47
[5] [FLUTTER] 다트 주요 라이브러리 둘러보기 - 2 / A Tour of the Dart Libraries : www.tutorialspoint.com/dart_programming/index.htmsteemit.com/dart/@wonsama/flutter-2-a-tour-of-the-dart-libraries
'CS(컴퓨터 과학) > Dart' 카테고리의 다른 글
[Dart] Control flow statements(제어문) (0) | 2020.08.20 |
---|---|
[Dart] Operators(연산자) (0) | 2020.08.19 |
[Dart] Variables(변수) (0) | 2020.08.19 |
[Dart] 기초 문법 (0) | 2020.08.19 |
[Dart] 개요 및 컨셉 (0) | 2020.08.19 |