Flutter/Dart how to groupBy list of maps

后端 未结 5 1703
后悔当初
后悔当初 2020-12-01 23:26

I have this list of maps.

[
    {title: \'Avengers\', release_date: \'10/01/2019\'},
    {title: \'Creed\', release_date: \'10/01/2019\'}
    {title: \'Juman         


        
5条回答
  •  忘掉有多难
    2020-12-02 00:20

    This is a method naively implemented (in case you don't want to use the groupBy function from the collections package):

    List>>> MapByKey(String keyName, String newKeyName, String keyForNewName, List> input) {
      Map>>> returnValue = Map>>>();
      for (var currMap in input) {
        if (currMap.containsKey(keyName)) {
          var currKeyValue = currMap[keyName];
          var currKeyValueForNewName = currMap[keyForNewName];
          if (!returnValue.containsKey(currKeyValue)){
            returnValue[currKeyValue] = {currKeyValue : List>()};  
          }
          returnValue[currKeyValue][currKeyValue].add({newKeyName : currKeyValueForNewName});
        }
      }
      return returnValue.values.toList();
    }
    
    void main() {
        var test = [
        {"title": 'Avengers', "release_date": '10/01/2019'},
        {"title": 'Creed', "release_date": '10/01/2019'},
        {"title": 'Jumanji', "release_date": '30/10/2019'},
      ];
    
      var testMapped = MapByKey("release_date", "name", "title", test);
    
      print("$testMapped");
    }
    

    The output is:

    [
        {
            10/01/2019: [
                {name: Avengers
                },
                {name: Creed
                }
            ]
        },
        {
            30/10/2019: [
                {name: Jumanji
                }
            ]
        }
    ]
    

提交回复
热议问题