flutter - 浏览 dart 中的嵌套字典
问题描述
在飞镖我有一个嵌套的元素列表
void main() {
var diction = <String, dynamic>{'1':'Alpha','2':'Beta','3':{'x':'Football','y':'Golf'},'4':{'a':'Samba','b':'Tango','c':'FoxTrott','d':'Waltz'}};
}
以及引导您浏览字典的键列表,例如
var keyList = ['4','a']
问题是,我不能只使用
diction['4','a']
但必须使用
diction['4']['a']
我怎样才能像最后一种情况一样调用字典?
解决方案
operator []
只接受一个参数。那是语言的语法,你不能改变它。
可能的行动:
没做什么。只需使用
dict[key1][key2]
并忍受它。我不清楚类似的东西dict[key1, key2]
是否会带来任何真正的改进。直接构造以
LinkedHashMap
aList
为 key 的 a。您需要提供equals
和hashCode
回调,因为List
相等通常基于对象身份并且不执行深度相等检查。(同样,通常每个List
实例都有一个不同的hashCode
.)当这一切都完成后,你可以使用dict[[key1, key2]]
. 请注意,使用这种方法,您可能会拥有可变数量的键。使用
package:tuple
并使用 aTuple2
作为键。然后你可以使用dict[Tuple2(key1, key2)]
. 由于元组是“值”类型并实现operator ==
andhashCode
,因此您可以Tuple2
直接使用而无需做额外的工作。派生您自己
Map
的基于类。您可能希望从package:collection
的DelegatingMap
类派生,该类将为您提供大部分实现。从那里您可以添加自己的方法,这些方法采用多个键并在内部执行嵌套查找。如果您添加一个call(Key1 key1, Key2 key2)
方法,您的自定义实例Map
将成为类似函数的对象,然后您的调用者可以使用它dict(key1, key2)
来执行查找。请注意,您将无法Map
使用相同的语法在自定义中设置项目。call()
或者,您可以添加get(Key1 key1, Key2 key2)
和set(Key1 key1, Key2 key2, Value value)
方法来代替使用。
推荐阅读
- kubernetes - Horizontal Pod Scaling 可以仅在一个节点上工作吗?
- r - 布局闪亮的应用程序以设置元素的高度以添加高达 100% 的窗口大小
- python - 带有 Flask 的 PyQt 不显示 MainWindow
- sql - 使用oracle计算clob列中的json
- angular - html上的角度绑定数据与来自后端的数据带有点('。')
- oracle - 如何使用来自普通游标的值打开 sys_refcursor?
- php - 如何在单个模板中打印或回显分类的 ACF 转发器字段?
- ruby - Gem::Gem Not Found 异常
- html - 如何为响应式 img 预留空间(阻止块向下跳)
- python - numpy genfromtxt - 如果未提供标题,则推断列标题