【发布时间】:2020-07-03 18:57:43
【问题描述】:
为了解决一个问题,我预先填充了一个地图,然后在需要时尝试从地图中提取答案。
地图是这样填充的:
var cycles = {
[0, 0, 0, 0, 0, 0, 0, 0] : [[0, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0, 1, 0], [0, 1, 0, 1, 1, 0, 1, 0], [0, 1, 1, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0, 1, 0], [0, 1, 0, 1, 1, 0, 1, 0], [0, 1, 1, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0]],
[0, 0, 0, 0, 0, 0, 0, 1] : [[0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0, 1, 0], [0, 1, 0, 1, 0, 0, 1, 0], [0, 1, 1, 1, 0, 0, 1, 0], [0, 0, 1, 0, 0, 0, 1, 0], [0, 0, 1, 0, 1, 0, 1, 0], [0, 0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 1, 1, 1, 0, 0], [0, 1, 0, 0, 1, 0, 0, 0], [0, 1, 0, 0, 1, 0, 1, 0], [0, 1, 0, 0, 1, 1, 1, 0], [0, 1, 0, 0, 0, 1, 0, 0], [0, 1, 0, 1, 0, 1, 0, 0]],
...
};
后来,一个函数是这样调用的:
print(pullAnswerFromMap([1,0,0,1,0,0,1,0], 1000000000));
其中pullAnswerFromMap函数定义为:
return cycles[cells][N % 14 == 0 ? 14 : N % 14];
cycles 映射将包含所有可能的键 - 所有 256 个 8 位列表。
但是当运行带有示例的代码进行测试时,我得到以下信息:
Unhandled exception:
NoSuchMethodError: The method '[]' was called on null.
Receiver: null
所以,在返回语句之前,我添加了print(cycles); - 地图打印得很好。所有数据都在那里。
然后我添加了print(cycles[[1,0,0,1,0,0,1,0]]);,它打印了null,尽管我可以看到它存在于上一个打印语句输出的映射中。
所以似乎密钥不是基于列表的相等性,而是基于列表的特定实例(内存地址?)。尝试从地图中检索值时,具有相同顺序的相同元素的新列表将返回 null。
我的问题是:我该如何解决这个问题,以便 cycles[[1,0,0,1,0,0,1,0]] 不返回 null 而是返回与之关联的 List<List<int>>?
【问题讨论】:
标签: dart