Dart indexWhere performance












1














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);

}









share|improve this question



























    1














    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);

    }









    share|improve this question

























      1












      1








      1







      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);

      }









      share|improve this question













      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);

      }






      dart






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 13 '18 at 1:22









      TwoSanTwoSan

      246111




      246111
























          1 Answer
          1






          active

          oldest

          votes


















          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)





          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53272429%2fdart-indexwhere-performance%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            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)





            share|improve this answer


























              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)





              share|improve this answer
























                1












                1








                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)





                share|improve this answer












                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)






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 13 '18 at 6:48









                Günter ZöchbauerGünter Zöchbauer

                316k66935881




                316k66935881






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53272429%2fdart-indexwhere-performance%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Xamarin.form Move up view when keyboard appear

                    Post-Redirect-Get with Spring WebFlux and Thymeleaf

                    Anylogic : not able to use stopDelay()