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}