gpt4 book ai didi

json - Dart:jsonEncode 是完全可预测的吗?

转载 作者:行者123 更新时间:2023-12-03 04:15:29 28 4
gpt4 key购买 nike

我想知道函数 jsonEncode()来自 dart:convert图书馆是完全可以预测的。也就是说,将jsonEncode()总是对 Map 的键和值进行编码对象以相同的顺序?

最佳答案

答案是:视情况而定。

作为一般规则,映射不存储任何顺序,并且迭代条目可能导致键值对以随机顺序返回。

不过,细节会更深入一些,并且有一些实现细节需要考虑。在 Dart 中,Map是一个抽象类,有几种不同类型的Map你可以使用。

HashMap这是 Map 的默认实现.不保留插入顺序,实际上,在迭代期间返回条目的顺序是相当随机的。但是,迭代顺序仅在 map 本身更改时才会更改。这意味着只要您不从 map 中添加或删除任何对象,迭代顺序每次都将是相同的顺序。

还有LinkedHashMap类(class)。不同于 HashMap ,这种类型的 map 确实保留了插入顺序。当您遍历条目时,它们将按照添加到 map 中的顺序出现。因此,迭代 LinkedHashMap 是安全的。假设特定顺序时。 (顺便说一下,这是使用 map 文字时创建的 map 类型,即 { 'a': 1 } 。)

另一个例子是 SplayTreeMap .与其他两个不同,此映射根据键的 compareTo 维护特定顺序。方法。此行为也可以通过在创建 map 时传入比较方法来覆盖。

这一切都假设我们正在讨论来自 Map 的迭代顺序。的观点。但是,从jsonEncode的角度来看可以是一个不同的故事。 Dart 尽可能委托(delegate)给本地特定于平台的 JSON 编码器,并且该编码器可以以不同于其实现建议的方式读取 map 。也没有真正的方法来预测转换库将如何返回从 JSON 解析的 map 。这不会以任何方式影响 JSON - 几乎每个 JSON 编码器和解析器都会以相同的方式对待 JSON,无论键的顺序如何。

简而言之,假设 Map 通常是不明智的。的条目将保持可预测甚至一致的顺序。如果您需要固定的顺序,另一种数据结构可能会更好。

关于json - Dart:jsonEncode 是完全可预测的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59277278/

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