飞镖索引性能

时间:2018-11-13 01:22:50

标签: dart

我想搜索fb3所在的索引。
我有两个indexAindexB这样的选择。
是否存在性能差异,例如A快于B或反之亦然?
有没有更好的搜索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);

}

1 个答案:

答案 0 :(得分:1)

如果try: #do your stuffs except: vote = "" context['voted'] = "" context['follower'] = "" return context FooBar未实现FooBaroperator==,则get hashCode将仅找到相同的实例。

indexB

另请参阅How does a set determine that two objects are equal in dart?

如果实现了var a = Foo('Fifth Id', 789); var b = Foo('Fifth Id', 789); var c = a; print(a == b); // false print(a == c); // true ,则不会有任何性能差异值得一提。如果您实际上只想查找相同的实例,那么operator ==会更快,但是使用

会更好
indexB