List.RemoveAll() efficiency / compiler optimisation The 2019 Stack Overflow Developer Survey Results Are InHow do I check if a list is empty?Finding the index of an item given a list containing it in PythonDifference between append vs. extend list methods in PythonHow to make a flat list out of list of lists?How to extend an existing JavaScript array with another array, without creating a new arrayHow do I get the number of elements in a list in Python?How do I concatenate two lists in Python?How to clone or copy a list?Swift Beta performance: sorting arraysReplacing a 32-bit loop counter with 64-bit introduces crazy performance deviations

Why hard-Brexiteers don't insist on a hard border to prevent illegal immigration after Brexit?

FPGA - DIY Programming

Worn-tile Scrabble

Delete all lines which don't have n characters before delimiter

Is this app Icon Browser Safe/Legit?

Multiply Two Integer Polynomials

Why didn't the Event Horizon Telescope team mention Sagittarius A*?

Can someone be penalized for an "unlawful" act if no penalty is specified?

Am I thawing this London Broil safely?

Are there incongruent pythagorean triangles with the same perimeter and same area?

For what reasons would an animal species NOT cross a *horizontal* land bridge?

What does Linus Torvalds mean when he says that Git "never ever" tracks a file?

If a Druid sees an animal’s corpse, can they wild shape into that animal?

How to deal with fear of taking dependencies

How to answer pointed "are you quitting" questioning when I don't want them to suspect

Output the Arecibo Message

Do these rules for Critical Successes and Critical Failures seem Fair?

What is the closest word meaning "respect for time / mindful"

Can a flute soloist sit?

How to save as into a customized destination on macOS?

Did Section 31 appear in Star Trek: The Next Generation?

What do hard-Brexiteers want with respect to the Irish border?

Protecting Dualbooting Windows from dangerous code (like rm -rf)

Is an up-to-date browser secure on an out-of-date OS?



List.RemoveAll() efficiency / compiler optimisation



The 2019 Stack Overflow Developer Survey Results Are InHow do I check if a list is empty?Finding the index of an item given a list containing it in PythonDifference between append vs. extend list methods in PythonHow to make a flat list out of list of lists?How to extend an existing JavaScript array with another array, without creating a new arrayHow do I get the number of elements in a list in Python?How do I concatenate two lists in Python?How to clone or copy a list?Swift Beta performance: sorting arraysReplacing a 32-bit loop counter with 64-bit introduces crazy performance deviations



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








22















Regarding efficiency, does anyone know if the compiler is clever enough to not create the array containing 1, 3, 5 for each iteration of the loop in the following code?



var foo = new List<int> 1, 2, 3, 4, 5 ;
foo.RemoveAll(i => new[] 1, 3, 5 .Contains(i));


I prefer it for readability, but not at the sake of performance.










share|improve this question



















  • 25





    try for your self sharplab.io

    – Michael Randall
    Apr 5 at 8:33






  • 1





    @MichaelRandall Great site. You should write an answer for this with an short example. This is interesseting for everybody, i think.

    – kara
    Apr 5 at 8:47






  • 1





    I'm really surprised but it looks like it does actually create a new instance of the 3 item array for each iteration inside the method internal bool <M>b__0_0(int i).

    – maxp
    Apr 5 at 8:50


















22















Regarding efficiency, does anyone know if the compiler is clever enough to not create the array containing 1, 3, 5 for each iteration of the loop in the following code?



var foo = new List<int> 1, 2, 3, 4, 5 ;
foo.RemoveAll(i => new[] 1, 3, 5 .Contains(i));


I prefer it for readability, but not at the sake of performance.










share|improve this question



















  • 25





    try for your self sharplab.io

    – Michael Randall
    Apr 5 at 8:33






  • 1





    @MichaelRandall Great site. You should write an answer for this with an short example. This is interesseting for everybody, i think.

    – kara
    Apr 5 at 8:47






  • 1





    I'm really surprised but it looks like it does actually create a new instance of the 3 item array for each iteration inside the method internal bool <M>b__0_0(int i).

    – maxp
    Apr 5 at 8:50














22












22








22


6






Regarding efficiency, does anyone know if the compiler is clever enough to not create the array containing 1, 3, 5 for each iteration of the loop in the following code?



var foo = new List<int> 1, 2, 3, 4, 5 ;
foo.RemoveAll(i => new[] 1, 3, 5 .Contains(i));


I prefer it for readability, but not at the sake of performance.










share|improve this question
















Regarding efficiency, does anyone know if the compiler is clever enough to not create the array containing 1, 3, 5 for each iteration of the loop in the following code?



var foo = new List<int> 1, 2, 3, 4, 5 ;
foo.RemoveAll(i => new[] 1, 3, 5 .Contains(i));


I prefer it for readability, but not at the sake of performance.







c# arrays list linq compiler-optimization






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Apr 5 at 21:31









Michael Randall

37.9k84473




37.9k84473










asked Apr 5 at 8:31









maxpmaxp

9,92735105175




9,92735105175







  • 25





    try for your self sharplab.io

    – Michael Randall
    Apr 5 at 8:33






  • 1





    @MichaelRandall Great site. You should write an answer for this with an short example. This is interesseting for everybody, i think.

    – kara
    Apr 5 at 8:47






  • 1





    I'm really surprised but it looks like it does actually create a new instance of the 3 item array for each iteration inside the method internal bool <M>b__0_0(int i).

    – maxp
    Apr 5 at 8:50













  • 25





    try for your self sharplab.io

    – Michael Randall
    Apr 5 at 8:33






  • 1





    @MichaelRandall Great site. You should write an answer for this with an short example. This is interesseting for everybody, i think.

    – kara
    Apr 5 at 8:47






  • 1





    I'm really surprised but it looks like it does actually create a new instance of the 3 item array for each iteration inside the method internal bool <M>b__0_0(int i).

    – maxp
    Apr 5 at 8:50








25




25





try for your self sharplab.io

– Michael Randall
Apr 5 at 8:33





try for your self sharplab.io

– Michael Randall
Apr 5 at 8:33




1




1





@MichaelRandall Great site. You should write an answer for this with an short example. This is interesseting for everybody, i think.

– kara
Apr 5 at 8:47





@MichaelRandall Great site. You should write an answer for this with an short example. This is interesseting for everybody, i think.

– kara
Apr 5 at 8:47




1




1





I'm really surprised but it looks like it does actually create a new instance of the 3 item array for each iteration inside the method internal bool <M>b__0_0(int i).

– maxp
Apr 5 at 8:50






I'm really surprised but it looks like it does actually create a new instance of the 3 item array for each iteration inside the method internal bool <M>b__0_0(int i).

– maxp
Apr 5 at 8:50













3 Answers
3






active

oldest

votes


















13














The answer is no it doesn't optimize out the allocation of the array



Basically, every time the predicate is called, it checks against the compiler generated class and initializes a new array to call the Contains (as you can see here)



private sealed class <>c

public static readonly <>c <>9 = new <>c();

public static Predicate<int> <>9__0_0;

internal bool <M>b__0_0(int i)

// bam!
int[] obj = new int[3];
RuntimeHelpers.InitializeArray(obj, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
return Enumerable.Contains(obj, i);







share|improve this answer
































    4














    As @Michael Randall already wrote, it looks like it is not possible.



    I agree, that your questioned code is nicely readable, having the list in the RemoveAll method. But to have the instance only once, I have three ideas of doing it:



    int[] a = null;
    foo.RemoveAll(i => (a ?? (a = new[] 1, 3, 5 )).Contains(i));


    This is actually yours, with little un-beatuness of needing an external variable.



     foo = foo.Except(new[] 1, 3, 5 ).ToList();


    That's actually pretty nice solution using Linq.



     new List<int>1, 3, 5.ForEach(x => foo.Remove(x));


    new[] 1, 3, 5.Iterate(x => foo.Remove(x));


    This is something I'd do. In neary all of my code I have my Extension method "Iterate" to avoid the need of foreach. And also, i dont want to "toList" everything all the time to make a .ForEach(..)



    static class Extensions

    public static void Iterate<TSource>(this IEnumerable<TSource> source, Action<TSource> action)

    foreach (var item in source)

    action.Invoke(item);








    share|improve this answer


















    • 6





      Beware, RemoveAll performs vastly better that multiple calls to Remove.

      – Theodor Zoulias
      Apr 5 at 9:42


















    0














    Since the compiler is not that smart, we must outsmart him.



    var foo = new List<int> 1, 2, 3, 4, 5 ;
    var bar = new HashSet<int>() 1, 3, 5 ;
    foo.RemoveAll(i => bar.Contains(i));





    share|improve this answer


















    • 1





      A hash set of 3 entries will surely not perform better, it would arguably (I have not measured) perform worse.

      – Sefe
      Apr 5 at 12:22






    • 3





      @Sefe While there is probably a difference between the hash set and the array, I think the point of this answer was to create bar outside of the anonymous function so that's it's created only once and to avoid the creation overhead.

      – Joshua Taylor
      Apr 5 at 12:42






    • 2





      @Sefe what you say is true, but I think that the OP provided a trivial example just to illustrate a point. In a real world scenario the lists will be probably longer than that.

      – Theodor Zoulias
      Apr 5 at 17:17












    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%2f55531327%2flistt-removeall-efficiency-compiler-optimisation%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    3 Answers
    3






    active

    oldest

    votes








    3 Answers
    3






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    13














    The answer is no it doesn't optimize out the allocation of the array



    Basically, every time the predicate is called, it checks against the compiler generated class and initializes a new array to call the Contains (as you can see here)



    private sealed class <>c

    public static readonly <>c <>9 = new <>c();

    public static Predicate<int> <>9__0_0;

    internal bool <M>b__0_0(int i)

    // bam!
    int[] obj = new int[3];
    RuntimeHelpers.InitializeArray(obj, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
    return Enumerable.Contains(obj, i);







    share|improve this answer





























      13














      The answer is no it doesn't optimize out the allocation of the array



      Basically, every time the predicate is called, it checks against the compiler generated class and initializes a new array to call the Contains (as you can see here)



      private sealed class <>c

      public static readonly <>c <>9 = new <>c();

      public static Predicate<int> <>9__0_0;

      internal bool <M>b__0_0(int i)

      // bam!
      int[] obj = new int[3];
      RuntimeHelpers.InitializeArray(obj, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
      return Enumerable.Contains(obj, i);







      share|improve this answer



























        13












        13








        13







        The answer is no it doesn't optimize out the allocation of the array



        Basically, every time the predicate is called, it checks against the compiler generated class and initializes a new array to call the Contains (as you can see here)



        private sealed class <>c

        public static readonly <>c <>9 = new <>c();

        public static Predicate<int> <>9__0_0;

        internal bool <M>b__0_0(int i)

        // bam!
        int[] obj = new int[3];
        RuntimeHelpers.InitializeArray(obj, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
        return Enumerable.Contains(obj, i);







        share|improve this answer















        The answer is no it doesn't optimize out the allocation of the array



        Basically, every time the predicate is called, it checks against the compiler generated class and initializes a new array to call the Contains (as you can see here)



        private sealed class <>c

        public static readonly <>c <>9 = new <>c();

        public static Predicate<int> <>9__0_0;

        internal bool <M>b__0_0(int i)

        // bam!
        int[] obj = new int[3];
        RuntimeHelpers.InitializeArray(obj, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
        return Enumerable.Contains(obj, i);








        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Apr 5 at 8:56









        kara

        2,30031127




        2,30031127










        answered Apr 5 at 8:51









        Michael RandallMichael Randall

        37.9k84473




        37.9k84473























            4














            As @Michael Randall already wrote, it looks like it is not possible.



            I agree, that your questioned code is nicely readable, having the list in the RemoveAll method. But to have the instance only once, I have three ideas of doing it:



            int[] a = null;
            foo.RemoveAll(i => (a ?? (a = new[] 1, 3, 5 )).Contains(i));


            This is actually yours, with little un-beatuness of needing an external variable.



             foo = foo.Except(new[] 1, 3, 5 ).ToList();


            That's actually pretty nice solution using Linq.



             new List<int>1, 3, 5.ForEach(x => foo.Remove(x));


            new[] 1, 3, 5.Iterate(x => foo.Remove(x));


            This is something I'd do. In neary all of my code I have my Extension method "Iterate" to avoid the need of foreach. And also, i dont want to "toList" everything all the time to make a .ForEach(..)



            static class Extensions

            public static void Iterate<TSource>(this IEnumerable<TSource> source, Action<TSource> action)

            foreach (var item in source)

            action.Invoke(item);








            share|improve this answer


















            • 6





              Beware, RemoveAll performs vastly better that multiple calls to Remove.

              – Theodor Zoulias
              Apr 5 at 9:42















            4














            As @Michael Randall already wrote, it looks like it is not possible.



            I agree, that your questioned code is nicely readable, having the list in the RemoveAll method. But to have the instance only once, I have three ideas of doing it:



            int[] a = null;
            foo.RemoveAll(i => (a ?? (a = new[] 1, 3, 5 )).Contains(i));


            This is actually yours, with little un-beatuness of needing an external variable.



             foo = foo.Except(new[] 1, 3, 5 ).ToList();


            That's actually pretty nice solution using Linq.



             new List<int>1, 3, 5.ForEach(x => foo.Remove(x));


            new[] 1, 3, 5.Iterate(x => foo.Remove(x));


            This is something I'd do. In neary all of my code I have my Extension method "Iterate" to avoid the need of foreach. And also, i dont want to "toList" everything all the time to make a .ForEach(..)



            static class Extensions

            public static void Iterate<TSource>(this IEnumerable<TSource> source, Action<TSource> action)

            foreach (var item in source)

            action.Invoke(item);








            share|improve this answer


















            • 6





              Beware, RemoveAll performs vastly better that multiple calls to Remove.

              – Theodor Zoulias
              Apr 5 at 9:42













            4












            4








            4







            As @Michael Randall already wrote, it looks like it is not possible.



            I agree, that your questioned code is nicely readable, having the list in the RemoveAll method. But to have the instance only once, I have three ideas of doing it:



            int[] a = null;
            foo.RemoveAll(i => (a ?? (a = new[] 1, 3, 5 )).Contains(i));


            This is actually yours, with little un-beatuness of needing an external variable.



             foo = foo.Except(new[] 1, 3, 5 ).ToList();


            That's actually pretty nice solution using Linq.



             new List<int>1, 3, 5.ForEach(x => foo.Remove(x));


            new[] 1, 3, 5.Iterate(x => foo.Remove(x));


            This is something I'd do. In neary all of my code I have my Extension method "Iterate" to avoid the need of foreach. And also, i dont want to "toList" everything all the time to make a .ForEach(..)



            static class Extensions

            public static void Iterate<TSource>(this IEnumerable<TSource> source, Action<TSource> action)

            foreach (var item in source)

            action.Invoke(item);








            share|improve this answer













            As @Michael Randall already wrote, it looks like it is not possible.



            I agree, that your questioned code is nicely readable, having the list in the RemoveAll method. But to have the instance only once, I have three ideas of doing it:



            int[] a = null;
            foo.RemoveAll(i => (a ?? (a = new[] 1, 3, 5 )).Contains(i));


            This is actually yours, with little un-beatuness of needing an external variable.



             foo = foo.Except(new[] 1, 3, 5 ).ToList();


            That's actually pretty nice solution using Linq.



             new List<int>1, 3, 5.ForEach(x => foo.Remove(x));


            new[] 1, 3, 5.Iterate(x => foo.Remove(x));


            This is something I'd do. In neary all of my code I have my Extension method "Iterate" to avoid the need of foreach. And also, i dont want to "toList" everything all the time to make a .ForEach(..)



            static class Extensions

            public static void Iterate<TSource>(this IEnumerable<TSource> source, Action<TSource> action)

            foreach (var item in source)

            action.Invoke(item);









            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Apr 5 at 9:01









            MaliorMalior

            808311




            808311







            • 6





              Beware, RemoveAll performs vastly better that multiple calls to Remove.

              – Theodor Zoulias
              Apr 5 at 9:42












            • 6





              Beware, RemoveAll performs vastly better that multiple calls to Remove.

              – Theodor Zoulias
              Apr 5 at 9:42







            6




            6





            Beware, RemoveAll performs vastly better that multiple calls to Remove.

            – Theodor Zoulias
            Apr 5 at 9:42





            Beware, RemoveAll performs vastly better that multiple calls to Remove.

            – Theodor Zoulias
            Apr 5 at 9:42











            0














            Since the compiler is not that smart, we must outsmart him.



            var foo = new List<int> 1, 2, 3, 4, 5 ;
            var bar = new HashSet<int>() 1, 3, 5 ;
            foo.RemoveAll(i => bar.Contains(i));





            share|improve this answer


















            • 1





              A hash set of 3 entries will surely not perform better, it would arguably (I have not measured) perform worse.

              – Sefe
              Apr 5 at 12:22






            • 3





              @Sefe While there is probably a difference between the hash set and the array, I think the point of this answer was to create bar outside of the anonymous function so that's it's created only once and to avoid the creation overhead.

              – Joshua Taylor
              Apr 5 at 12:42






            • 2





              @Sefe what you say is true, but I think that the OP provided a trivial example just to illustrate a point. In a real world scenario the lists will be probably longer than that.

              – Theodor Zoulias
              Apr 5 at 17:17
















            0














            Since the compiler is not that smart, we must outsmart him.



            var foo = new List<int> 1, 2, 3, 4, 5 ;
            var bar = new HashSet<int>() 1, 3, 5 ;
            foo.RemoveAll(i => bar.Contains(i));





            share|improve this answer


















            • 1





              A hash set of 3 entries will surely not perform better, it would arguably (I have not measured) perform worse.

              – Sefe
              Apr 5 at 12:22






            • 3





              @Sefe While there is probably a difference between the hash set and the array, I think the point of this answer was to create bar outside of the anonymous function so that's it's created only once and to avoid the creation overhead.

              – Joshua Taylor
              Apr 5 at 12:42






            • 2





              @Sefe what you say is true, but I think that the OP provided a trivial example just to illustrate a point. In a real world scenario the lists will be probably longer than that.

              – Theodor Zoulias
              Apr 5 at 17:17














            0












            0








            0







            Since the compiler is not that smart, we must outsmart him.



            var foo = new List<int> 1, 2, 3, 4, 5 ;
            var bar = new HashSet<int>() 1, 3, 5 ;
            foo.RemoveAll(i => bar.Contains(i));





            share|improve this answer













            Since the compiler is not that smart, we must outsmart him.



            var foo = new List<int> 1, 2, 3, 4, 5 ;
            var bar = new HashSet<int>() 1, 3, 5 ;
            foo.RemoveAll(i => bar.Contains(i));






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Apr 5 at 9:40









            Theodor ZouliasTheodor Zoulias

            37519




            37519







            • 1





              A hash set of 3 entries will surely not perform better, it would arguably (I have not measured) perform worse.

              – Sefe
              Apr 5 at 12:22






            • 3





              @Sefe While there is probably a difference between the hash set and the array, I think the point of this answer was to create bar outside of the anonymous function so that's it's created only once and to avoid the creation overhead.

              – Joshua Taylor
              Apr 5 at 12:42






            • 2





              @Sefe what you say is true, but I think that the OP provided a trivial example just to illustrate a point. In a real world scenario the lists will be probably longer than that.

              – Theodor Zoulias
              Apr 5 at 17:17













            • 1





              A hash set of 3 entries will surely not perform better, it would arguably (I have not measured) perform worse.

              – Sefe
              Apr 5 at 12:22






            • 3





              @Sefe While there is probably a difference between the hash set and the array, I think the point of this answer was to create bar outside of the anonymous function so that's it's created only once and to avoid the creation overhead.

              – Joshua Taylor
              Apr 5 at 12:42






            • 2





              @Sefe what you say is true, but I think that the OP provided a trivial example just to illustrate a point. In a real world scenario the lists will be probably longer than that.

              – Theodor Zoulias
              Apr 5 at 17:17








            1




            1





            A hash set of 3 entries will surely not perform better, it would arguably (I have not measured) perform worse.

            – Sefe
            Apr 5 at 12:22





            A hash set of 3 entries will surely not perform better, it would arguably (I have not measured) perform worse.

            – Sefe
            Apr 5 at 12:22




            3




            3





            @Sefe While there is probably a difference between the hash set and the array, I think the point of this answer was to create bar outside of the anonymous function so that's it's created only once and to avoid the creation overhead.

            – Joshua Taylor
            Apr 5 at 12:42





            @Sefe While there is probably a difference between the hash set and the array, I think the point of this answer was to create bar outside of the anonymous function so that's it's created only once and to avoid the creation overhead.

            – Joshua Taylor
            Apr 5 at 12:42




            2




            2





            @Sefe what you say is true, but I think that the OP provided a trivial example just to illustrate a point. In a real world scenario the lists will be probably longer than that.

            – Theodor Zoulias
            Apr 5 at 17:17






            @Sefe what you say is true, but I think that the OP provided a trivial example just to illustrate a point. In a real world scenario the lists will be probably longer than that.

            – Theodor Zoulias
            Apr 5 at 17:17


















            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55531327%2flistt-removeall-efficiency-compiler-optimisation%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







            Popular posts from this blog

            រឿង រ៉ូមេអូ និង ហ្ស៊ុយលីយេ សង្ខេបរឿង តួអង្គ បញ្ជីណែនាំ

            Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given

            Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221