How to sort map value?

The SplayTreeMap has a named constructor which accepts map and a comparator which is used to sort given map while building new map. Since SplayTreeMap is a descendant of Map you can easily substitute it.

import 'dart:collection';
void main() {
  var unsorted = {'A': 3, 'B': 1, 'C': 2};
  final sorted = SplayTreeMap.from(
    unsorted, (key1, key2) => unsorted[key1].compareTo(unsorted[key2]));
  print(sorted);
}

This example uses a custom compare function which makes sort() sort the keys by value. Then the keys and values are inserted into a LinkedHashMap because this kind of map guarantees to preserve the order. Basically the same as https://stackoverflow.com/a/29629447/217408 but customized to your use case.

import 'dart:collection';

void main() {
  var temp= { 
    'A' : 3,
    'B' : 1,
    'C' : 2
  };

  var sortedKeys = temp.keys.toList(growable:false)
    ..sort((k1, k2) => temp[k1].compareTo(temp[k2]));
    LinkedHashMap sortedMap = new LinkedHashMap
      .fromIterable(sortedKeys, key: (k) => k, value: (k) => temp[k]);
  print(sortedMap);
}

Try it on DartPad

Tags:

Dart