Flutter/Dart - Map에 key-value 추가

Map(HashMap)에 key-value 값을 추가하는 방법을 소개합니다.

1. Map[key]를 이용한 방법

Map[key] = value와 같은 방식으로 key-value를 Map에 추가할 수 있습니다.

또한 동일한 방식으로 Map에 이미 존재하는 key의 value를 업데이트할 수 있습니다.

void main() {

    Map<String, int> map = {};

    map['a'] = 0;
    map['b'] = 1;
    map['c'] = 2;
    print(map);

    map['a'] = 10;
    print(map);
}

Output:

{a: 0, b: 1, c: 2}
{a: 10, b: 1, c: 2}

2. putIfAbsent()를 이용한 방법

Map.putIfAbsent(key, function)는 Map에 key가 존재하지 않을 때 function의 리턴 값이 등록됩니다.

아래와 같이 key-value 값을 Map에 추가할 수 있습니다.

void main() {

    Map<String, int> map = {};

    map.putIfAbsent('a', () => 0);
    map.putIfAbsent('b', () => 1);
    map.putIfAbsent('c', () => 2);
    print(map);
}

Output:

{a: 0, b: 1, c: 2}

만약 putIfAbsent()로 이미 존재하는 key에 대해서 다른 값으로 추가하려고 하면, 값이 업데이트 되지 않고 동일 아이템이 추가되지도 않습니다.

void main() {

    Map<String, int> map = {};

    map.putIfAbsent('a', () => 0);
    map.putIfAbsent('a', () => 2);
    print(map);
}

Output:

{a: 0}

3. update()로 value 변경

Map.update(key, function)은 Map에 key가 존재할 때, function의 리턴 값으로 업데이트 됩니다. function의 인자로 Map에 저장된 value가 전달됩니다.

아래 예제는 key a의 value를 2로 업데이트하고, 그 다음은 기존 value에 10을 더하여 value를 업데이트합니다.

void main() {

    Map<String, int> map = {};

    map.putIfAbsent('a', () => 1);
    print(map);

    map.update('a', (value) => 2);
    print(map);

    map.update('a', (value) => value + 10);
    print(map);
}

Output:

{a: 2}
{a: 12}

3.1 Invalid argument 예외

update()로 어떤 key의 value를 변경할 때, Map에 key가 존재하지 않으면 Exception이 발생합니다.

void main() {

    Map<String, int> map = {};

    map.update('a', (value) => value + 10);
    print(map);
}

Output:

Unhandled exception:
Invalid argument (key): Key not in map.: "a"
#0      MapMixin.update (dart:collection/maps.dart:154:5)
#1      main
bin/dart_application_1.dart:5

3.2 key가 존재하지 않을 때 초기 값 설정

key가 존재하지 않을 때, 값을 업데이트하지 않고 초기 값으로 key-value를 추가하도록 구현할 수 있습니다.

아래 예제와 같이 ifAbsent 인자로 초기 값을 리턴하는 함수를 전달하면 됩니다.

void main() {

    Map<String, int> map = {};

    map.update('a', (value) => value + 10, ifAbsent: () => 0);
    print(map);

    map.update('a', (value) => value + 10, ifAbsent: () => 0);
    print(map);
}

Output:

{a: 0}
{a: 10}

4. addAll()으로 다른 Map의 아이템 추가

Map.addAll(otherMap)은 다른 Map의 key-value 값을 모두 Map에 추가합니다.

void main() {

    Map<String, int> map = {};
    Map<String, int> otherMap = {'a': 0, 'b': 1, 'c': 2};

    map.addAll(otherMap);
    print(map);
}

Output:

{a: 0, b: 1, c: 2}
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha