首页 > 解决方案 > 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?

标签: dart

解决方案


这不是您通常可以建议的解决方案,因为它依赖于列表中每个对象的 toString() 实现。此外,这将创建很多对象,因为您正在创建每个字符串(对列表中的每个元素调用 toString())并将所有字符串组合成一个大字符串,然后将其与另一个大字符串进行比较。因此,当列表变大时,性能会变得非常糟糕。

另一个问题是您需要在开始比较之前生成每个列表的完整 toString() 字符串。因此,如果列表不相等,您只是为了找出每个列表中的第一个元素不相等而浪费了大量内存。

仅仅因为两个对象给出了相同的 toString() 输出,所以它们并不相同。有时,返回不同 toString() 的两个对象应该被认为是相同的。一个大问题是所有对象的标准 toString() 只返回“'TYPE' 的实例”,因此您的解决方案很容易出错。

请阅读 Mattia 的评论,这被认为要好得多。


推荐阅读