반응형
250x250
12-01 05:03
Today
Total
«   2024/12   »
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
Notice
Recent Posts
Recent Comments
Link
Archives
관리 메뉴

Bill Kim's Life...

[Dart] Collection : List & Set & Map 본문

CS(컴퓨터 과학)/Dart

[Dart] Collection : List & Set & Map

billnjoyce 2020. 8. 19. 14:55
728x90
반응형
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

728x90
반응형

'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
Comments