Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

dart - How to sort map value?

I have this map:

var temp= { 
  'A' : 3,
  'B' : 1,
  'C' : 2
};

How to sort the values of the map (descending). I know, I can use temp.values.toList()..sort().

But I want to sort in context of the keys like this:

var temp= { 
  'B' : 1,
  'C' : 2
  'A' : 3,
};
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...