Intro
Dart 의 Map 은 자바 혹은 여타 다른 다양한 언의들의 Map 과 같습니다. key : value 쌍으로 이루어진 데이터 타입으로, key와 value 모두에 String, int 그리고 Object 등까지 다양한 자료형을 배치할 수 있습니다.
Map의 기본 사용법
선언
다른 변수들과 마찬가지로 데이터타입을 명시하거나 명시하지 않는 두 가지 방법으로 선언할 수 있습니다.
1
2
Map<String, int> map1 = {"key1" : 1, "key2" : 2};
var map2 = {"key3" : 3, "key4" : 4};
특징
– Key : Value 쌍으로 이루어져 있다.
– Key와 Value에는 다양한 형태의 데이터를 넣을 수 있다.
– Key 값은 중복을 허용하지 않는다.
– Value 값은 중복이 허용된다.
안에 넣을 수 있는 값
Map 의 key 와 value 에는 다양한 종류의 데이터가 들어갈 수 있습니다.
String, int, double, bool 그리고 List, 또 다른 Map 또한 넣을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void main() {
// can input any object in key or value or both
Map<List<String>, String> auth = {
['Home', 'DashBoard'] : 'guest',
['Home', 'AdminPage'] : 'admin',
};
Map<String, List<int>> nums = {
'underFive' : [1, 2, 3, 4],
'underTen' : [5, 6, 7, 8, 9],
};
// also can contain several types of obejcts
var someMap = {
'first' : 'dragon',
'second' : 100,
'third' : [10, 20, 30],
'real' : true,
};
}
요소의 추가
Map 에 요소(원소)를 추가하는 방법은 크게 두 가지가 있습니다.
1.대괄호[] 이용하기
1
2
3
4
5
6
Map<String, String> map1 = {};
map1['key1'] = 'value1';
map1['key2'] = 'value2';
print(map1);
// >> {key1: value1, key2: value2}
2.addAll() 메서드 사용
1
2
3
4
5
6
Map<String, String> map1 = {};
map1.addAll({'key1' : 'value1'});
map1.addAll({'key2' : 'value2'});
print(map1);
// >> {key1: value1, key2: value2}
또한 addAll은 여러 개의 key-value 쌍을 한 번에 넣을 수도 있습니다.
1
2
3
4
5
Map<String, String> map1 = {};
map1.addAll({'key1' : 'value1', 'key2' : 'value2'});
print(map1)
// >> {key1: value1, key2: value2}
key에 해당하는 value를 찾기
앞서 봤던 대괄호[]를 이용해 value 값을 찾을 수 있습니다.
1
2
3
Map<String, String> map1 = {"key1" : "value1", "key2" : "value2"};
print(map1['key2']);
// >> value2
Map 의 메서드
Map 에는 다양한 메서드가 존재합니다.
length
Map의 요소 개수를 반환
1
2
3
Map<String, String> map1 = {"key1" : "value1", "key2" : "value2"};
print(map1.length);
// >> 2
keys
Map의 key 들을 Iterable 형태로 반환
1
2
3
4
5
Map<String, String> map1 = {"key1" : "value1", "key2" : "value2"};
print(map1.keys);
// >> (key1, key2)
print(map1.keys.runtimeType);
// >> _CompactIterable<String>
values
Map의 값(value)들을 Iterable 형태로 반환
1
2
3
4
5
Map<String, String> map1 = {"key1": "value1", "key2": "value2"};
print(map1.values);
// >> (value1, value2)
print(map1.values.runtimeType);
// >> _CompactIterable<String>
isEmpty, isNotEmpty
Map이 비어있거나 비어있지 않은지를 확인
1
2
3
4
5
6
7
8
9
10
11
Map<String, String> map1 = {"key1": "value1", "key2": "value2"};
Map<String, int> map2 = {};
print(map1.isEmpty);
// >> false
print(map1.isNotEmpty);
// >> true
print(map2.isEmpty);
// >> true
print(map2.isNotEmpty);
// >> false
containsKey
특정 키가 Map에 존재하는지 확인
1
2
3
4
5
Map<String, String> map1 = {"key1": "value1", "key2": "value2"};
print(map1.containsKey("key1"));
// >> true
print(map1.containsKey("abc"));
// >> false
containsValue
특정 값이 Map에 존재하는지 확인
1
2
3
4
5
Map<String, String> map1 = {"key1": "value1", "key2": "value2"};
print(map1.containsValue("value1"));
// >> true
print(map1.containsValue("key1"));
// >> false
addAll
Map에 요소(원소)를 추가합니다.
1
2
3
4
5
6
Map<String, String> map1 = {};
map1.addAll({'key1' : 'value1'});
map1.addAll({'key2' : 'value2'});
print(map1);
// >> {key1: value1, key2: value2}
또한 addAll은 여러 개의 key-value 쌍을 한 번에 넣을 수도 있습니다.
1
2
3
4
5
Map<String, String> map1 = {};
map1.addAll({'key1' : 'value1', 'key2' : 'value2'});
print(map1)
// >> {key1: value1, key2: value2}
remove
Map 에 있는 요소를 제거합니다. 제거할 때에는 key값을 파라미터로 넣습니다.
1
2
3
4
Map<String, String> map1 = {"key1": "value1", "key2": "value2"};
map1.remove("key1");
print(map1);
// >> {key2: value2}