Aug*_*ski 3 dictionary dart flutter
将应用程序从 Swift 移植到 Flutter。在我的应用程序中,我有一个类,MyClass,并且正在处理大约 250 个实例的列表。在不同的时候,我需要根据特定属性对对象进行分组。
在 Swift 中,我能够像这样创建对象的分组列表:
var groupedList = Dictionary<String, Array<MyClass>>()
Run Code Online (Sandbox Code Playgroud)
然后我就可以遍历我的对象列表,并根据需要将项目分配给正确的数组。我认为在 Flutter 中制作列表地图可能会这样:
Map groupedList = Map<String, List<MyClass>>();
Run Code Online (Sandbox Code Playgroud)
然后我可以遍历项目,测试属性,为每个唯一值创建一个 Map 条目并将项目附加到正确的列表:
for (var item in listOfObjects) {
if (!groupedList.containsKey(item.someproperty)) {
List<MyClass> sublist = [];
groupedList[item.someproperty] = sublist;
}
groupedList[item.someproperty].add(item);
}
Run Code Online (Sandbox Code Playgroud)
然而,我得到的是一个包含所有正确键的映射,但每个列表只包含一个 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';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1724 次 |
| 最近记录: |