0

I want to search index where fb3 is.
I have two options indexA and indexB like so.
Is there any performance differences like A is faster than B or vice versa?
Is there any better way to search fb3?

class Foo {
 String id; //unique
 int number;
 Foo(this.id, this.number);
}

class Bar {
 String id; //unique
 int number;
 Bar(this.id, this.number);
}

class FooBar {
 Foo foo;
 Bar bar;
 FooBar(this.foo, this.bar);
}

void main() {
  final Foo f = Foo('First Id', 18);
  final Bar b = Bar('Second Id', 81);
  final FooBar fb = FooBar(f, b);

  final Foo f2 = Foo('Third Id', 900);
  final Bar b2 = Bar('Fourth Id', 009);
  final FooBar fb2 = FooBar(f2, b2); 

  final Foo f3 = Foo('Fifth Id', 789);
  final Bar b3 = Bar('Sixth Id', 987);
  final FooBar fb3 = FooBar(f3, b3);  

  final Foo f4 = Foo('Seventh Id', 222);
  final Bar b4 = Bar('Eighth Id', 666);
  final FooBar fb4 = FooBar(f4, b4);

  final List<FooBar> fbs = [fb, fb2, fb3, fb4];

  final int indexA = fbs.indexWhere((FooBar fb) => fb.foo.id == fb3.foo.id && fb.bar.id == fb3.bar.id);
  final int indexB = fbs.indexWhere((FooBar fb) => fb == fb3);

}
Daibaku
  • 11,416
  • 22
  • 71
  • 108

1 Answers1

1

If Foo, Bar, and FooBar do not implement operator== and get hashCode then indexB will only find identical instances.

var a = Foo('Fifth Id', 789);
var b = Foo('Fifth Id', 789);
var c = a;
print(a == b); // false
print(a == c); // true

See also How does a set determine that two objects are equal in dart?

There won't be any performance difference worth mentioning if operator == is implemented. If you actually only want to find identicial instances then indexB would be faster, but then it would be better to use

(FooBar fb) => identical(fb, fb3)
Günter Zöchbauer
  • 623,577
  • 216
  • 2,003
  • 1,567