gpt4 book ai didi

dictionary - Dart 在 Python 中有类似 `defaultdict` 的东西吗?

转载 作者:行者123 更新时间:2023-12-03 03:08:41 24 4
gpt4 key购买 nike

我想做的是下面这个。如果可能的话,你能教我怎么做吗?

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));

最佳答案

您可以在 Map 上使用 putIfAbsent 方法来创建和插入例如如果 map 尚不存在,则为 map 的空列表:https://api.dart.dev/stable/2.7.2/dart-core/Map/putIfAbsent.html

void main() {
Map<String, List<int>> m = {};

m.putIfAbsent('001', () => []).add(1);
m.putIfAbsent('001', () => []).add(2);
m.putIfAbsent('002', () => []).add(3);

print(m); // {001: [1, 2], 002: [3]}
}

替代解决方案

如果你打算经常使用这种模式,那么实现你自己的 Defaultdict 类会更容易,这并不复杂,因为我们只是希望它表现得像一个 Map:

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]}
}

关于dictionary - Dart 在 Python 中有类似 `defaultdict` 的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61198441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com