Map(HashMap)을 key 또는 value로 정렬하는 방법을 소개합니다.
1. key로 Map 정렬
아래와 같이 key를 기준으로 오름차순 정렬을 할 수 있습니다.
Map.fromEntries()는 Entry로부터 Map을 생성map.entries.toList()..sort(compare)는 Entry 리스트를 compare 함수로 정렬
void main() {
Map<int, String> map = {5: 'apple', 1: 'kiwi', 3: 'melon', 4: 'orange'};
Map<int, String> sortedMap = Map.fromEntries(
map.entries.toList()..sort((e1, e2) => e1.key.compareTo(e2.key)));
print(sortedMap);
}Output:
{1: kiwi, 3: melon, 4: orange, 5: apple}1.1 내림차순 정렬
만약 내림차순으로 정렬하고 싶다면, 위의 코드에서 compare 함수의 비교 순서를 반대로 변경하면 됩니다.
void main() {
Map<int, String> map = {5: 'apple', 1: 'kiwi', 3: 'melon', 4: 'orange'};
Map<int, String> sortedMap = Map.fromEntries(
map.entries.toList()..sort((e1, e2) => e2.key.compareTo(e1.key)));
print(sortedMap);
}Output:
{5: apple, 4: orange, 3: melon, 1: kiwi}2. value로 Map 정렬
아래와 같이 value를 기준으로 오름차순 정렬을 할 수 있습니다.
위의 예제와 비슷하지만, compare 함수에서 value로 정렬 순서를 비교하도록 구현하였습니다.
void main() {
Map<int, String> map = {5: 'apple', 1: 'kiwi', 3: 'melon', 4: 'orange'};
Map<int, String> sortedMap = Map.fromEntries(
map.entries.toList()..sort((e1, e2) => e1.value.compareTo(e2.value)));
print(sortedMap);
}Output:
{5: apple, 1: kiwi, 3: melon, 4: orange}2.1 내림차순 정렬
만약 내림차순으로 정렬하고 싶다면, 위의 코드에서 compare 함수의 비교 순서를 반대로 변경하면 됩니다.
void main() {
Map<int, String> map = {5: 'apple', 1: 'kiwi', 3: 'melon', 4: 'orange'};
Map<int, String> sortedMap = Map.fromEntries(
map.entries.toList()..sort((e1, e2) => e2.value.compareTo(e1.value)));
print(sortedMap);
}Output:
{4: orange, 3: melon, 1: kiwi, 5: apple}3. SplayTreeMap으로 Map 정렬
SplayTreeMap는 key-value를 Map에 추가할 때, 정렬 순서를 유지하면서 저장하는 Map입니다.
SplayTreeMap.from(otherMap, compare)는 otherMap의 요소들을 compare 함수로 정렬된 순서로 Map을 초기화합니다.
key로 Map을 오름차순으로 정렬하려면 아래와 같이 compare 함수를 구현하면 됩니다.
import 'dart:collection';
void main() {
Map<int, String> map = {5: 'apple', 1: 'kiwi', 3: 'melon', 4: 'orange'};
Map<int, String> sortedMap =
SplayTreeMap<int, String>.from(map, (k1, k2) => k1.compareTo(k2));
print(sortedMap);
}Output:
{1: kiwi, 3: melon, 4: orange, 5: apple}value로 Map을 오름차순으로 정렬하려면 아래와 같이 value를 비교하도록 구현하면 됩니다.
import 'dart:collection';
void main() {
Map<int, String> map = {5: 'apple', 1: 'kiwi', 3: 'melon', 4: 'orange'};
Map<int, String> sortedMap =
SplayTreeMap<int, String>.from(map, (k1, k2) => map[k1]!.compareTo(map[k2]!));
print(sortedMap);
}Output:
{5: apple, 1: kiwi, 3: melon, 4: orange}Loading script...
Related Posts
- Flutter/Dart - Future.delayed() 사용 방법
- Flutter/Dart - Stream 사용 방법
- Flutter/Dart - 파일, 디렉토리 삭제
- Flutter/Dart - 텍스트 파일 쓰기
- Flutter/Dart - 반복문 (for, while, for-in, forEach)
- Flutter/Dart - Static 변수, 메소드 선언
- Flutter/Dart - 텍스트 파일 읽기
- Flutter/Dart - 다양한 Null 체크 방법
- Flutter/Dart - Double을 Int로 변환
- Flutter/Dart - Double을 String으로 변환
- Flutter/Dart - String을 Double로 변환
- Flutter/Dart - String을 List로 변환
- Flutter/Dart - String에서 특정 문자열 Index 찾기
- Flutter/Dart - String 길이(length)
- Flutter/Dart - 몇 초 지연시키기, sleep
- Flutter/Dart - 날짜 계산, 년/월/일 더하고 빼기
- Flutter/Dart - 날짜 문자열을 DateTime으로 변환
- Flutter/Dart - 현재 시간 가져오기, DateTime
- Flutter/Dart - Map에 key-value 추가
- Flutter/Dart - Map 선언 및 초기화
- Flutter/Dart - Map 순회 방법
- Flutter/Dart - Map에서 Entry(key-value) 제거
- Flutter/Dart - key, value로 Map 정렬
- Flutter/Dart - 리스트 복사 방법
- Flutter/Dart - 리스트 합치는 방법
- Flutter/Dart - 리스트 최대값, 최소값 찾기
- Flutter/Dart - 리스트 요소 추가, 특정 위치 추가
- Flutter/Dart - 리스트 요소 제거
- Flutter/Dart - 리스트 요소 값 변경, 찾기
- Flutter/Dart - 리스트 합계, 평균 계산
- Flutter/Dart - 리스트 중복 제거
- Flutter/Dart - 리스트 정렬 (오름차순, 내림차순)
- Flutter/Dart - 리스트 자르기, 분리하기
- Flutter/Dart - 변수 타입 체크
- Flutter/Dart - 리스트 필터링