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 - 리스트 필터링