skip to Main Content

I am trying to reverse Map values. But didin’t get proper one,

here my Map

Map<String, dynamic> details = {
    "sms": {
      "very_low": false,
      "low": false,
      "medium": false,
      "high": false,
      "very_high": true
    }
  };

I want to get like this ;

{
  sms: {
     very_high: true,
     high: false,
     medium: false, 
     low: false, 
     very_low: false
   }
 }
               
            
   

If Anyone please share your ideas

4

Answers


  1. Let’s say this is your "map":

    Map<String, dynamic> details = {
      "sms": {
        "very_low": false,
        "low": false,
        "medium": false,
        "high": false,
        "very_high": true
      }
    };
    

    You can use this extension:

    extension NewMap on Map {
      Map reverse() => Map.fromEntries(entries.toList().reversed);
    }
    

    and use it like this:

    details["sms"] = (details["sms"] as Map<String, dynamic>).reverse();
    
    print("details =$details"); //details = {sms: {very_high: true, high: false, medium: false, low: false, very_low: false}}
    
    Login or Signup to reply.
  2.    final details = 
         {"sms" : {"very_low" : false, "very_hight" : true, "very_medium" : false} };
       
       final outerMap = {};
      
      for(final m in details.entries){
        
        final reversedList = m.value.entries.toList().reversed;
        final innerMap = {};
        innerMap.addEntries(reversedList);
        outerMap.addAll({m.key : innerMap});
      }
      
      print(outerMap);
      //details = {sms: {very_medium: false, very_hight: true, very_low: false}}
    
    Login or Signup to reply.
  3. A solution that works for any Map no matter how much nested it is:

    Object reverse(Object object) {
      if (object is Map) {
        return Map.fromEntries(object.entries.map((e) => MapEntry(e.key, reverse(e.value))).toList().reversed);
      }
      return object;
    }
    

    usage:

    void main() async {
      Map<String, dynamic> details = {
        "sms": {
          "very_low": false,
          "low": false,
          "medium": false,
          "high": false,
          "very_high": true
        }
      };
      var newDetails = reverse(details);
    
      print(details);
      //{sms: {very_low: false, low: false, medium: false, high: false, very_high: true}}
    
      print(newDetails);
      //{sms: {very_high: true, high: false, medium: false, low: false, very_low: false}}
    }
    
    
    
    Login or Signup to reply.
  4. import 'dart:convert';
    
    Map<String, dynamic> yourMap = {
      "sms": {
        "very_low": false,
        "low": false,
        "medium": false,
        "high": false,
        "very_high": true
      }
    };
    
    Map<K, V> reverse<K, V>(Map<K, V> source) {
      return Map<K, V>.fromEntries(source.entries.toList().reversed);
    }
    
    main() {
      print(jsonEncode(yourMap));
      
      yourMap['sms'] = reverse(yourMap['sms']);
      
      print(jsonEncode(yourMap));
    }
    

    Prints:

    {"sms":{"very_low":false,"low":false,"medium":false,"high":false,"very_high":true}}

    {"sms":{"very_high":true,"high":false,"medium":false,"low":false,"very_low":false}}

    Please note that this only works because Map behind the scenes constructs a LinkedHashMap that is insertion-ordered. If you construct other types of Map that are not, this may not work. Generally speaking, it might be wise to not rely on the order of items in a Map because it is not guaranteed unless you created the Map yourself.

    Since this looks like it should be JSON: don’t bother sorting this. It is supposed to be a machine-to-machine protocol, machines do not care if it looks neat. The less uneccessary code you write, the less bugs you produce.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search