아래와 같은 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, 나]}
}
끝.