dart - compare ordered Lists using equality in Dart
问题描述
Assuming I have two list of the same type and order. Is it safe to compare them using equality sign?
List<String> list1 = ["foo", "bar"];
List<String> list2 = ["foo", "bar"];
bool res = list1.toString() == list2.toString();
expect(res, true);
Read this question but non mentioned this method. Maybe its just appropriate to ordered lists? Or its unsafe?
解决方案
这不是您通常可以建议的解决方案,因为它依赖于列表中每个对象的 toString() 实现。此外,这将创建很多对象,因为您正在创建每个字符串(对列表中的每个元素调用 toString())并将所有字符串组合成一个大字符串,然后将其与另一个大字符串进行比较。因此,当列表变大时,性能会变得非常糟糕。
另一个问题是您需要在开始比较之前生成每个列表的完整 toString() 字符串。因此,如果列表不相等,您只是为了找出每个列表中的第一个元素不相等而浪费了大量内存。
仅仅因为两个对象给出了相同的 toString() 输出,所以它们并不相同。有时,返回不同 toString() 的两个对象应该被认为是相同的。一个大问题是所有对象的标准 toString() 只返回“'TYPE' 的实例”,因此您的解决方案很容易出错。
请阅读 Mattia 的评论,这被认为要好得多。
推荐阅读
- android - 在 Android 服务中使用 ADAL 获取访问令牌
- c# - Postsharp:从一个方面访问已经应用的方面
- r - 将 sql 数据表转换为 sparklyr 数据框
- apache - 重写除了 ! 在 htaccess Apache 2.4.6 中不起作用
- android - Unity Android清单合并问题
- python - 在 python 中,如何创建一个名称未指定的新变量,直到运行时(编辑:如何将 setattr() 与列表组合一起使用)?
- python - 如何在另一个 Python 类构造函数中实例化 Python 类?
- hazelcast - Hazelcast 3.8.2 中的内存泄漏
- git - 有什么方法可以在同一个文件夹中拥有版本化和非版本化的 .gitignore?
- php - PHP 从单个列中获取自定义标签并将它们分开