Dictionary Dart在Python中是否有类似“defaultdict”的东西?
我想做的是下面这个。 如果可能的话,你能教我怎么做吗Dictionary Dart在Python中是否有类似“defaultdict”的东西?,dictionary,flutter,dart,default,Dictionary,Flutter,Dart,Default,我想做的是下面这个。 如果可能的话,你能教我怎么做吗 import 'package:my_package/data_object.dart'; Map<String, List<DataObject>> m = Map<int, List<DataObject>>(); // Create an empty map. m['001'].add(DataObject(something: something)); // Can add DataOb
import 'package:my_package/data_object.dart';
Map<String, List<DataObject>> m = Map<int, List<DataObject>>(); // Create an empty map.
m['001'].add(DataObject(something: something)); // Can add DataObject without checking if '001' exists.
m['002'].add(DataObject(something: something));
您可以使用地图上的putIfAbsent方法来创建和插入地图上尚未存在的空列表:
替代解决方案
如果要经常使用此模式,只需实现自己的Defaultdict类就更容易了,因为我们只希望它的行为像一个映射:
import 'dart:collection';
class Defaultdict<K,V> extends MapBase<K,V> {
final Map<K,V> _map = {};
final V Function() _ifAbsent;
Defaultdict(this._ifAbsent);
@override
V operator [](Object key) => _map.putIfAbsent(key as K, _ifAbsent);
@override
void operator []=(K key, V value) => _map[key] = value;
@override
void clear() => _map.clear();
@override
Iterable<K> get keys => _map.keys;
@override
V remove(Object key) => _map.remove(key);
}
void main() {
// Create a Defaultdict where we return a empty new list for unknown keys
final m = Defaultdict<String, List<int>>(() => []);
m['001'].add(1);
m['001'].add(2);
m['002'].add(3);
print(m); // {001: [1, 2], 002: [3]}
}
您可以使用地图上的putIfAbsent方法来创建和插入地图上尚未存在的空列表:
替代解决方案
如果要经常使用此模式,只需实现自己的Defaultdict类就更容易了,因为我们只希望它的行为像一个映射:
import 'dart:collection';
class Defaultdict<K,V> extends MapBase<K,V> {
final Map<K,V> _map = {};
final V Function() _ifAbsent;
Defaultdict(this._ifAbsent);
@override
V operator [](Object key) => _map.putIfAbsent(key as K, _ifAbsent);
@override
void operator []=(K key, V value) => _map[key] = value;
@override
void clear() => _map.clear();
@override
Iterable<K> get keys => _map.keys;
@override
V remove(Object key) => _map.remove(key);
}
void main() {
// Create a Defaultdict where we return a empty new list for unknown keys
final m = Defaultdict<String, List<int>>(() => []);
m['001'].add(1);
m['001'].add(2);
m['002'].add(3);
print(m); // {001: [1, 2], 002: [3]}
}
我通常在可能的情况下使用???:
var m={};
m['001']??=[]添加数据对象某物:某物;
m['002']??=[]添加数据对象某物:某物;
请注意,这与使用putIfAbsent不同,因为它将覆盖键存在但值为null的条目。如果您的地图中从未存储空值,请使用您认为更干净的选项。我通常使用???=如果可能:
var m={};
m['001']??=[]添加数据对象某物:某物;
m['002']??=[]添加数据对象某物:某物;
请注意,这与使用putIfAbsent不同,因为它将覆盖键存在但值为null的条目。如果您从未在地图中存储空值,则使用您认为更干净的选项。使用defaultdict类示例的替代解决方案更新。使用defaultdict类示例的替代解决方案更新。