gpt4 book ai didi

dart - 使用 List 作为 Map 的键总是返回 null

转载 作者:行者123 更新时间:2023-12-03 03:21:32 25 4
gpt4 key购买 nike

为了解决一个问题,我预先填充了一个 map ,然后在需要时尝试从 map 中提取答案。
map 填充如下:

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 map 将拥有所有可能的 key - 所有 256 个 8 位列表。
但是当运行带有示例的代码进行测试时,我得到以下信息:
Unhandled exception:
NoSuchMethodError: The method '[]' was called on null.
Receiver: null
所以,在return语句之前,我添加了 print(cycles); - map 打印得很好。所有数据都在那里。
然后我添加了 print(cycles[[1,0,0,1,0,0,1,0]]);打印 null ,即使我可以看到它存在于上一个打印语句的输出中的映射中。
因此,似乎 key 不是基于列表的相等性,而是基于列表的特定实例(内存地址?)。尝试从映射中检索值时,具有相同顺序的相同元素的新列表将返回 null。
我的问题是:我怎样才能解决这个问题,以便 cycles[[1,0,0,1,0,0,1,0]]不返回 null而是返回 List<List<int>>它与什么有关?

最佳答案

So it seems as though the key isn't based on the equality of the lists, but somehow on the specific instance (memory address?) of the list.

Map (默认为 LinkedHashMap )使用 key 类型的 operator ==hashCode确定两个键是否相同。 List不会覆盖那些;两个独立的 List实例永远不会比较相等,因此您尝试查找 Map来自 List 的值 key 总是会失败。
解决这个问题的几种方法是:
  • 明确使用 the LinkedHashMap constructor这样您就可以提供自己的回调来计算哈希码并确定两个键是否相等。
  • Map 创建一个自定义类键,您的类(class)有 List<int>成员和覆盖 operator ==hashCode适本地。

  • How can I compare Lists for equality in Dart?了解如何对 List 进行深度相等检查s。

    关于dart - 使用 List<int> 作为 Map 的键总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62721280/

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