Dictionary 在flatter中创建列表的映射

Dictionary 在flatter中创建列表的映射,dictionary,flutter,dart,Dictionary,Flutter,Dart,将应用程序从Swift移植到Flatter。在我的应用程序中,我有一个类,MyClass,正在处理大约250个实例的列表。在不同的时候,我需要根据特定的属性对对象进行分组 在Swift中,我可以创建一个对象的分组列表,如下所示: var groupedList = Dictionary<String, Array<MyClass>>() var groupedList=Dictionary() 然后,我可以循环浏览我的对象列表,并根据需要将项目分配到正确的数组。我想在

将应用程序从Swift移植到Flatter。在我的应用程序中,我有一个类,
MyClass
,正在处理大约250个实例的列表。在不同的时候,我需要根据特定的属性对对象进行分组

在Swift中,我可以创建一个对象的分组列表,如下所示:

var groupedList = Dictionary<String, Array<MyClass>>()
var groupedList=Dictionary()
然后,我可以循环浏览我的对象列表,并根据需要将项目分配到正确的数组。我想在Flitter中制作列表地图可能会有用,如下所示:

Map groupedList = Map<String, List<MyClass>>();
Map groupedList=Map();
然后,我可以循环遍历项目,测试属性,为每个唯一值创建一个映射条目,并将项目附加到正确的列表中:

for (var item in listOfObjects) {
  if (!groupedList.containsKey(item.someproperty)) {
    List<MyClass> sublist = [];
    groupedList[item.someproperty] = sublist;
  }
  groupedList[item.someproperty].add(item);
}
for(listOfObjects中的变量项){
如果(!groupedList.containsKey(item.someproperty)){
列表子列表=[];
groupedList[item.someproperty]=子列表;
}
groupedList[item.someproperty].add(item);
}

然而,我得到的是一个包含所有正确键的映射,但每个列表只包含一个MyClass实例,而不是一个实际的MyClass列表

使用
putIfAbsent
有一个更简洁的语法。这将提供您期望的结果:

void main() {
  var groupedList = <String, List<MyClass>>{};
  var listOfObjects = <MyClass>[
    MyClass('Europe', 'France'),
    MyClass('Europe', 'Germany'),
    MyClass('Europe', 'Italy'),
    MyClass('North America', 'USA'),
    MyClass('Asia', 'Japan'),
    MyClass('Asia', 'China'),
  ];

  for (var item in listOfObjects) {
    groupedList.putIfAbsent(item.someProperty, () => <MyClass>[]).add(item);
  }

  print(groupedList);
}

class MyClass {
  String someProperty;
  String someValue;

  MyClass(this.someProperty, this.someValue);

  @override
  String toString() => '$someProperty->$someValue';
}
void main(){
var groupedList={};
变量listOfObjects=[
MyClass(“欧洲”、“法国”),
MyClass(“欧洲”、“德国”),
MyClass(“欧洲”、“意大利”),
MyClass(“北美”、“美国”),
MyClass(“亚洲”、“日本”),
MyClass(“亚洲”、“中国”),
];
for(listOfObjects中的变量项){
groupedList.putIfAbsent(item.someProperty,()=>[])。添加(item);
}
打印(分组列表);
}
类MyClass{
字符串属性;
字符串someValue;
MyClass(this.someProperty,this.someValue);
@凌驾
字符串toString()=>“$someProperty->$someValue”;
}

也许你应该试试酒吧,它的灵感来自微软LINQThank!终于找到了我想要的