Как определить, совпадают ли элементы в списке 2 (но нельзя использовать прямое равенство) - PullRequest
0 голосов
/ 17 июня 2019

У меня есть этот код здесь, чтобы увидеть, идентичны ли элементы в обоих списках:

for (final car in this.cars) {
      bool found = false;
      for (final car2 in garage2.cars) {
        if (car2.id == car.id) {
          found = true;
          break;
        }
      }
      if (!found) {
        return false;
      }
    }

    return true;
}

(я ранее проверял, равны ли 2 длины списка).Есть ли способ переписать это, чтобы у меня не было сложности O (n2)?

1 Ответ

0 голосов
/ 17 июня 2019

В качестве опции вы можете переопределить методы quals и hashcode для класса Car примерно так:

class Car {
  int id;
  // other fields

  @override
  bool operator ==(Object o) => o is Car && id == o.id;

  @override
  int get hashCode => id.hashCode;
}

, а затем вы можете использовать собственный метод listEquals , который сравнивается для глубокого равенства.

import 'package:flutter/foundation.dart';

bool isEqual = listEquals<Car>(cars, garage2.cars);
...