flutter LinkedHashMap 与 python 中的orderedDict 对比

标签 flutter dart sha256 linkedhashmap ordereddictionary

从去年秋天开始,我就是个 flutter 宝贝。当我们使用 flutter 类型时,它们通常提供像 toString() 这样的通用功能。其中之一是'.runtimeType '但是这个'得到runtimeType ' 方法似乎在 Release模式下不起作用,实际上在 Debug模式下工作得很好。

假设我们有像 Map amIMap = {"key": "is key", "value": "is value",}; 这样的法线贴图 通常我们认为这个var的类型是'Map',但是print(amIMap.runtimeType); Debug模式下的方法(看起来不像在 Release模式下工作)打印的不是“Map”,而是类似 LinkedHashMap 的内容,这可能因开发环境而略有不同,但与 LinkedHashMap 的概念基本相同。 .

那么问题来了。在此链接中'https://api.flutter.dev/flutter/dart-collection/LinkedHashMap-class.html ',上面情况中的打印类型似乎是 Dart 团队真正想要的,而且看起来真的很像 python 中的orderedDict。通过这个问题,我想确定 LinkedHashMap 这个概念使用安全。我的意思是,我想知道键及其对应值对的顺序是否安全地保持相同,就像 python 中的“orderedDict”一样,无论调试、配置文件、 Release模式、dartpad 甚至平台等环境如何比如 android、ios、macos、linux、window、web!

由于我发现runtimeType在我的应用程序中的 Release模式下效果不佳,我担心 Release模式下的sdk可能会忘记键值对的顺序,就像runtimeType方法一样。

我问这个问题的原因是我需要强制这些对的顺序与我在IDEA中的dart代码完全相同,这样我就可以将它们转换为相同格式的json字符串,然后对json进行哈希处理字符串,它们都具有完全相同的对顺序,采用 crypto 包的 sha256 哈希方法。在进行哈希处理之前,映射的顺序必须保持相同。让我害怕的是,flutter 往往在不同的环境中以不同的方式工作。另外,当我使用 firestore 插件时,我必须手动对 firestore 中的 map 进行排序,因为它们的顺序与可以通过 firebase 控制台检查的顺序不同。这些问题似乎都有相似的背景。所以我需要 bool 值,如果 linkedHashMap 即使在 Release模式下也要保存我的 map 的对顺序,无论在 flutter 2.0 的各种平台上,就像 python 中的orderedDict 一样。

希望这个领域的任何一位大师都能以完全令人信服的经验来回答这个问题。如果我在这个问题中留下了不清楚甚至错误的内容,我将非常感谢您的评论,

提前谢谢您[:

最佳答案

首先,除了调试之外,您不应该将 .runtimeType 用于任何其他用途。正如您所看到的,输出实际上不太稳定,因此很少用于任何用途。如果您需要检查给定对象是否与给定兼容,您应该使用is运算符。

第二,Map() Dart 中的构造函数({} 语法的作用相同)被记录为创建 LinkedHashMap 的实例。 。由于这是标准 SDK 和语言设计的一部分,因此不会改变。此外,此行为在运行 Dart 的所有平台上都是稳定的。

但是如果您想确保始终使用 LinkedHashMap ,您可以显式创建 LinkedHashMap 的实例通过从 dart:collection 导入类。

LinkedHashMap记录为:

The insertion order of keys is remembered, and keys are iterated in the order they were inserted into the map. Values are iterated in their corresponding key's order. Changing a key's value, when the key is already in the map, does not change the iteration order, but removing the key and adding it again will make it be last in the iteration order.

关于flutter LinkedHashMap 与 python 中的orderedDict 对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67261371/

相关文章:

flutter - 使用 flutter webview 作为主页并按后退按钮关闭应用程序

flutter - Dart 中的多级 map 或 map 列表?

Flutter如何通过for循环显示列表

flutter - 如何更改应用栏 flutter 上文本和图标的颜色

android - 构建每个像素在 flutter 术语中意味着什么

android-studio - 如何在 Android Studio 中隐藏 dart 代码的水平和垂直引导线

android - 无法从 Objective C 解密 AES 加密字符串

flutter - 如何在 flutter 中使用 Telegram api 创建消息传递模块

typescript - "TypeError: hashConstructor is not a constructor",在 AWS-Lambda 上使用 "@aws-sdk/signature-v4"时出错

Node 中的 C# HMAC Sha256 等效项