반응형

드디어 스터디 마지막회차.

이번 스터디에서는 Map 심화버전을 다뤄보고자 한다. 

먼저 간단한 예제를 통해 Map과 List를 알아보자.

void main() {
Map map = {
	'Apple' : '사과',
	'Banana' : '바나나',
	'Kiwi' : '키위'
};

	print(map.keys);
	print(map.values);
    
}
(Apple, Banana, Kiwi)
(사과, 바나나, 키위)

Map에서 key값과 value값들을 확인하기 위해선 위와같이 확인할 수 있다.

※물론, print(map['Apple']); 이런형태로도 개별확인은 가능하다.

이번에는 위 map을 List로 변경하려면 어떻게 해야할까?

print(map.keys.toList());
print(map.values.toList());
[Apple, Banana, Kiwi]
[사과, 바나나, 키위]

toList()로 간단하게 List로 변경하여 활용이 가능하다.


이번엔 Map에 entries에 대한 개념에 대해서 익혀보자

Map에 존재하는 entries는 key값과 value값을 셋트로 매핑하여 꺼낼수 있는 기능이라 할수 있다.

아래 예제로 살펴보자.

  Map map = {
    'Apple' : '사과',
    'Banana' : '바나나',
    'Kiwi' : '키위'
  };
  
    final newMap = map.entries.map((entry){
    final key = entry.key;
    final value = entry.value;
    
    return '$key는 한글로 $value 입니다.';
  });
    
  print(newMap);
(Apple는 한글로 사과 입니다., Banana는 한글로 바나나 입니다., Kiwi는 한글로 키위 입니다.)

위 소스에서 entry변수는 인덱스 마다의 key와 value를 담고 있다.

entry.key와 entry.value로 각 인덱스마다 값을 추출할 수 있다.

 

또한 List에서 사용했던 forEach, reduce와 fold도 entries를 이용하면 사용할 수 있다.

reduce와 fold가 기억나지 않는다면, 아래 포스팅 다시 참조!

 

Dart언어공부-25.List 심화 (forEach, map, reduce, fold)

이번 스터디에서는 List심화단계를 다뤄보려 한다. 바로 소스로 확인해 보자. 1. Looping 활용 List world = [ '한국', '중국', '일본', '러시아', '미국' ]; world.forEach((value){ print(value); }); 한국..

masswhale.tistory.com


바로 예제로 확인해보자.

  Map map = {
    'Apple' : '사과',
    'Banana' : '바나나',
    'Kiwi' : '키위'
  };
  
  
    map.entries.forEach((entry){
    final key = entry.key;
    final value = entry.value;
    
    print('$key는 한글로 $value 입니다.');
  
  });
  
  final total = map.entries.fold(0,(vTotal,entry){
    return vTotal + entry.key.length;
    
  });
    
  print(total);
Apple는 한글로 사과 입니다.
Banana는 한글로 바나나 입니다.
Kiwi는 한글로 키위 입니다.
15

위와 같이 entries를 사용하며, forEach와 fold를 무리없이 사용할 수 있다.


Map얘기를 잠깐 떠나,  만약 List에서 index정보까지 받아서 확인하고 싶다면 어떻게 해야할까?

바로 asMap()를 사용하면 된다.

  List<int> numbers = [
    10,
    20,
    30,
    40,
    50,    
  ];
  
  
  final newMap3 = numbers.asMap();
  
  print(newMap3);
{0: 10, 1: 20, 2: 30, 3: 40, 4: 50}

위와같이 List에서 asMap()이라는 간단한 함수를 통해, 자리번호에 따른 값을 확인할 수 있다.

 

여기서 바로 asMap과 entries를 이용하여, 셋트로 추출이 가능하다.

  List<int> numbers = [
    10,
    20,
    30,
    40,
    50,    
  ];
  
    final newMap4 = numbers.asMap().entries.map((entry){
    final index = entry.key;
    final value = entry.value;
    
    return 'index가 $index 일때 값은 $value 입니다.';
  
  });
  
  print(newMap4);
(index가 0 일때 값은 10 입니다., index가 1 일때 값은 20 입니다., index가 2 일때 값은 30 입니다., index가 3 일때 값은 40 입니다., index가 4 일때 값은 50 입니다.)

이렇게 List를 맵으로바꿔서 entries, reduce,fold도 가능하다.

Map과 List를 상황에 따라 서로 바꿔가며 사용을 할수 있다. 

코딩에 정답은 없으니, 언제든 구현하려는 기능에, 상황에 따라 

구현하면 된다.

 

Dart 왕초보 기초 파트 스터디 끝!

반응형

+ Recent posts