我想搜索fb3
所在的索引。
我有两个indexA
和indexB
这样的选择。
是否存在性能差异,例如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);
}
答案 0 :(得分:1)
如果try:
#do your stuffs
except:
vote = ""
context['voted'] = ""
context['follower'] = ""
return context
,Foo
和Bar
未实现FooBar
和operator==
,则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