본문 바로가기
Dead Code/Flutter_Dart

[플러터] Map 정렬하기

by JO_i 2023. 7. 12.

아래와 같은 dblist Map이 있다고 하면,

 

Map<int, List<dynamic>> dblist = {
  0: [1, '가', 8, '나'],
  1: [2, '마', 4, '바'],
  2: [6, '자', 1, '치'],
};

 

 

Map의 구성은 아래와 같다.

 

print(dblist);
//console >> {0: [1, 가, 8, 나], 1: [2, 마, 4, 바], 2: [6, 자, 1, 치]}

 

 

정렬을 위해 Key값을 리스트로 추출하는 방법은 아래와 같다.

 

// 키 값을 리스트로 추출
var sortedKeys = dblist.keys.toList(growable: false);
print(sortedKeys);
//console >> [0, 1, 2]

 

 

LinkedHashMap 사용을 위해서는 collection 패키지를 import 해야한다.

 

import 'dart:collection';

 

 

추출한 키값을 원하는 정렬기준(sortbyColumn)으로 정렬한 뒤, LinkedHashMap으로 다시 정렬된 Key값 기준으로 Map을 구성해 준다. 전체 코드는 아래와 같다.

 

datasrot(int sortbyColumn, {bool descending = true}) {
// 키 값을 리스트로 추출
  var sortedKeys = dblist.keys.toList(growable: false);

// sortbyColumn을 기준으로 key값을 정렬
  if (descending) {
    sortedKeys.sort(
      (k1, k2) =>
          dblist[k1]![sortbyColumn].compareTo(dblist[k2]![sortbyColumn]),
    );
  } else {
    sortedKeys.sort(
      (k2, k1) =>
          dblist[k2]![sortbyColumn].compareTo(dblist[k1]![sortbyColumn]),
    );
  }

//정렬된 키값을 기준으로 다시 Map을 작성
  LinkedHashMap<int, List<dynamic>> sortedMap = LinkedHashMap.fromIterable(
      sortedKeys,
      key: (k) => k,
      value: (k) => dblist[k]!);
  print(sortedMap);
//descending applied
//console >> {2: [6, 자, 1, 치], 1: [2, 마, 4, 바], 0: [1, 가, 8, 나]}

  dblist = sortedMap;
  print(dblist);
//console >> {2: [6, 자, 1, 치], 1: [2, 마, 4, 바], 0: [1, 가, 8, 나]}
}

 

끝.