C# : Sort
Top 37 C# Example Pages...

["w.y...rl. `+YXBST~~}T~~PF984FZCBEcBBCaCCCCP5586464F55XS}T~~}T~~","Reverse string."," A string can be reversed. A reversal method can be implemented in several ways. Some ways are faster than others.","And some methods"," use more lines of code\u2014they are more complex to understand. We review and time some string reversal methods with a recent .NET Framework. ","Required input, output","\n\nframework krowemarf\nexample string gnirts elpmaxe","An example."," This solution requires just 3 lines of code. The method shown in this article is based on my work with ToCharArray. It is static because it stores no state. ","ToCharArray ","tochararray","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","Based on:"," .NET 4.6\n\n","C# program that reverses strings","\n\nusing System;\n\nstatic class StringHelper\n{","\n /// <summary>\n /// Receives string and returns the string with its letters reversed.\n /// </summary>\n ","public static string ","ReverseString","(string s)\n {\n char[] arr = s.ToCharArray();\n Array.Reverse(arr);\n return new string(arr);\n }\n}\n\nclass Program\n{\n static void Main()\n {\n Console.WriteLine(StringHelper.ReverseString(","\"framework\"","));\n Console.WriteLine(StringHelper.ReverseString(","\"samuel\"","));\n Console.WriteLine(StringHelper.ReverseString(","\"example string\"","));\n }\n}\n\n","Output","\n\nkrowemarf\nleumas\ngnirts elpmaxe","Notes, above method."," The method receives a string parameter\u2014this is the string in which you wish to reverse the order of the letters. ","Reverse: ","The method calls Array.Reverse to modify the order of the chars. Reverse cannot be used on a string directly.","Static Method ","static","Array.Reverse ","array-reverse","Notes, control flow."," The method copies to an array using ToCharArray. This returns the mutable char[] buffer from the string. It returns a string with the new string constructor. ","Char Array ","char-array","String Constructor ","string-constructor","Performance: ","Using ToCharArray on strings for modifications is often efficient. Many benchmarks support this statement.","Benchmark, string reversal."," Suppose your program must reverse strings millions or billions of times. Can we use some simple logic to optimize string reversal? Here we test 2 methods. ","Method 1: ","This method uses ToCharArray and Array.Reverse. It is short and simple, probably good enough for most programs.","Method 2: ","This version allocates an empty char array, and iterates backwards through the string and assigns elements in the array.","Result: ","The iterative method ReverseStringDirect is faster\u2014nearly twice as fast. It does not use Array.Reverse or ToCharArray.","Tip: ","For optimal performance, use caching. Also consider just iterating through a string backwards instead of ever creating a string.","C# program that benchmarks string reverse methods","\n\nusing System;\nusing System.Diagnostics;\n\nclass Program\n{\n public static string ","ReverseString","(string s)\n {\n char[] array = s.ToCharArray();\n Array.Reverse(array);\n return new string(array);\n }\n\n public static string ","ReverseStringDirect","(string s)\n {\n char[] array = new char[s.Length];\n int forward = 0;\n for (int i = s.Length - 1; i >= 0; i--)\n {\n array[forward++] = s[i];\n }\n return new string(array);\n }\n\n static void Main()\n {\n int sum = 0;\n const int _max = 10000000;\n Console.WriteLine(ReverseString(","\"test\"","));\n Console.WriteLine(ReverseStringDirect(","\"test\"","));","\n\n // Version 1: reverse with ToCharArray.\n ","var s1 = Stopwatch.StartNew();\n for (int i = 0; i < _max; i++)\n {\n sum += ReverseString(","\"programmingisfun\"",").Length;\n }\n s1.Stop();","\n\n // Version 2: reverse with iteration.\n ","var s2 = Stopwatch.StartNew();\n for (int i = 0; i < _max; i++)\n {\n sum += ReverseStringDirect(","\"programmingisfun\"",").Length;\n }\n s2.Stop();\n\n Console.WriteLine(s1.Elapsed.TotalMilliseconds);\n Console.WriteLine(s2.Elapsed.TotalMilliseconds);\n }\n}\n\n","Results","\n\ntset\ntset\n","597.2342 ms"," ReverseString\n","392.2862 ms"," ReverseStringDirect","A summary."," We saw a method that receives a string and returns the string with its characters in the reverse order. It is one of many examples of using char arrays for string manipulation. ","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","3679700504","data-ad-format","link","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO4AAAAvCAMAAADThAYBAAAAMFBMVEX////suOjW1tbn5+fjid3z8fSZquR4keT5+Pq1wOr32vXZ4PfK0/NPdeTj6PnkT9vNZmRwAAAFF0lEQVR4XrWZ6ZaySgxFM9QIDu//tlflIyscqgOXpfuvkmQDp5sIGfTopdT7/V5L6ZlGTBNzevF8PlNizuSZa3/QCSaGCpdp72meS6mJgFJujf4k9/uGehtURhJ73fdRdp7WOh3acFCB6tqcEJvOxiKGeeDclZdEueHhrhxQZ39JnmPS5HQ/lDnQ5bAClVWqEVBX3dVpSvtS3GhXq7e9bqv3ET3QNdh03Y0x1m0prkA3vIaG1cbzdnzqSgZds0VKoGuw6RplBl2zjX3b7iis3cEWmZyu0ZvpwifALdS1FqZrlIGuswU4CC9GN54mNdCFcewWGpNP6CZ/JyI9yq2RQQvCi6FOz7NnDtl8UEsXkV6K6RbUTStweUNdmDExiwhzwjMmcBX30ZW8DW5iecHOfwp1/ZhdVrp9ef6nm1JiFg9D9h411HVfxxI2pAochtEt0nwqkhgJzhyVOtYt3taAy5tlwLZDFumuB+omb2ts05sFwovR7eqDlcSRIBg6HIeaiYkH0gK60MF/pZehboMZ8foubbAtRlfU3yeyAdKr8gGM6eYurqdais7q+igYHcPP0ZAK4R1GN8GJg2Qkr4vGZA3Apdi8p3UdBXXxkmANDsL7sGQJvcDkYjCa08Xzb9GtIqK5EVHLKiLdpci56IrVH+rC2O6SQBu7JkF4b+Po8qfUp7X6bE2ma5SdbhHJtNJE4DFTVXNu5Jjgj2HTU7rQxoJIGN5hdL2uiJKhuxtFh7rVdDM5xAZ+/LHFwXPGYqyHuthm1Z0gvDMZdfxfV5QcKgnHyao7XcuFkicL9DWliRdV1LUeQ137LrY5/s+bfXS9biMP6NoFGOvWvqUMtpO2mCJCW7IGugyYLoS3DKPrdRlAXTMG3ZiOqzmShHboQDeGMbz7/UBMN4aQjNk91m1OFmyF9qBuOqmrGCKMLk0ndJH+f3Vb+ttWv6pb4ci2ie7vdcNxWb6r2yxnZR/dL+iWQ10MDKxfX9PF8I6jS/pj3eG0KSVbbdo3dTG87jmofUFX/sLrtq0pi0fphK78BejuwwvRJRUAN5YU6eqR7m2bF1NF21hXz+pieGe4lyn/RLd7XYYtBG2v6/rHDPwFZzNp/a2uZRo2aiDTRV1cIpXG4cXoUgticV3XNrFAV032i7rZhReiu3B0n/AV3Xusq6qNjOu6uDpgeB8uurFuOqULDN45eF3+mGYwDXVDkulmGoa3u+UvwD996JFu8PldstWCdfULumwzmg2E10c3IicbMdYdzP8oZls/bbJ/6+TInze+07EutsG3eGmxwSVwni3HQgaUgv2FI93FvJYXtukuLfxKrTaYrazuRcIpXX5LvWDD1+TVxpZAQJzEE0ulp0OOdAOqLLr8DDipGyFeV2EkjG5YiSVf1+2iS5zST3V5aQPhNSC6kW0SaZd1iyy6WfiXury08eEFuv88thW6qlvWdSeL8O90GbcqKVF0KbbVi7q128FkG8cIvqAb/kKgPYouhbaSY925lDqSLeIOVv8aFRffo+zaK9PhiNYmCG8RcrCVGv3YQLGuypveS6n1n3etpcuCxWmB0wt7rc1ssyKwMK1tmNMb+IkAZ8yC6L42Vop2FhXTUQloeAByXjdus+VAN0Dpki6KtC/rxgU0bBHaXtRFj/Y73UyHuuSJbC/rokbToMkF3SgLLdQIbI91m6qek8ggDItvrBu3QUKPPC6lmQ51TSXrm0DBOqm91s6ZThK0uUiDSudG+Q+cSRLJ2s8yWgAAAABJRU5ErkJggg==)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAABpCAMAAADflzs9AAAAVFBMVEX////2+fju9PHy9/X0+Pbx9vTo8Ozj7ejZ5uDP4tmwz8Dd6uTL3dTV49x8sJe208Wuzr/P39drpoq61chopIecw7CSvahgn4F1rJFjoYOAsppyqo9IgRfDAAACtElEQVR4Xu3XyVKEMBSF4cxh7Hn2/d9TrtE+VUhTaJrcLPIvLGXjJyegiq/0ZfPIoIBRt2sOBYzLCePzwZiA+bgwtvnBaNES5iylYUlrLbffGGnlF+YiteJKNyPMWUjNkh0wu18YprTNCCM1PwZpZfLBmJwwumAKpmAKpmCSVzAFUzAF47oQvlgCcEMrYtxfMBboVTBtTpguG4wfDCoXjCXQNMb3g6/3Iwo1Bvlq3/Wti8aIfdfVwFCghtw8BnP3JhbjCQEMLMjNYhSAdSyGFO43Zk+KvuoJs39iTLhQDT0xNSm86wM7DiPCww0MoA6fvD7A6ueOtKSPxVSkGGPa502vCTuD8T9YQ8xYDDHUGENr+Oc362cw9LNYQRHGRmJoJz/GYBwoxxgcLmepeEwYov4/pkPxmDCEeRNGxGIsTTJ/ZtJhaPbqH08T2AqAaAzt5Be+ZwxhzOjR7u3bMEG16A2MWSqBlx6qojHYff53E2YhJy68GVMBA820RVjAoXkTBqz5v2eQaseXXRU2da7831QwBbNmUjapMPK4na1pds0lFcadrgtKhTlkhPH5YIxoCXM/ve5wSIXRAbNTbjLvvFKXK3VOgJEVYRqpJ7PWmPPTsjJG2m+MsFMpZRUsqTBbIScyRmhYEmJeBEsSTAvMjCUl5jhv4cfAwo+BhR8DSzKMUMBMWh4yIeblTE2wWJEQo19gtsGihGC+M7A4wYyBZaPA4JsJG/HfGVj4McfReeF66cGygYURc8RG3BicF34Mzgs/BueFGwOLEvwYbMSPgYUbsx2dF14MLPyYY4eNuDH3xwGW5BhkFDmw0SLMppls20S0o84nWJZhEgQLP+bmxTLMx/qWUy8WYjbX+7pdb5VYlFau7uq12g8NH71YilHGGLlKhpJieUZbtWbWavGH5MqJuEqfDRAN8iKPPjsAAAAASUVORK5CYII=)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAABFCAMAAAAIJEiLAAAAGFBMVEUAru+g2Pf///8xt/BpxvPS6/vp9f0TtPCISbH1AAADCklEQVR4Xu2bwY7CMAxEPWM7/P8fr9baaNSG0lIQK6q8U2vhxk9ODD1gJBE3uwS3AEkjwy5EkCajqzgZ7GLAwi5G2M2uxceEJpPJZDKZTCYTzzCBsH8kAMCeA0OOJykNkLDP4iZAMu05UjkyYnMZveyEX3QJf9iVJN6npIC6FNTtWfSI/aeRfLsSpCAnup0nyF4nPqwkAwwV5ctKrS9G4qNKPtT/+nEK9t44/0EJ2mUiFTyr1EoEdSGlQGYi+t0vpRSFS6k+CZgwh5K1FJCJRkrJ7zYk7kQdiCeUUIskCSlFY8EWmiJCpy89WaRLiEruoLEjJfRNLxTesxRjdpB0r4ueB4p4rJTrQj0poHXuKG0UGsOcapXnh5WcJEDSajnNQWQJ+LaSUBG5Dsooc6EUW3W2laqziMNKlqVElFJ/ZLoavjkeCrhBn0OPRbm11VdeSknjZXfnPa0EsjUyuhLU5bp8rFQRnfqm5HIKXayVsmeLjfZBzT2mFCyslLSUtvUjJSwqVV810BRbKSkslBirOuHHvyb+Th/qLvtSUewqtVWl6rB6V7EYlRReo4TnycWaySqRgntKeU/JTNGm2FElzYfzSlFr9p7FaSVdKMozSvmykpPE+5TaQqmbfXbjWWoy6XCKUxtPUXxUqWmBrqTSTyvFYuItYu3cxItM2DE4KLk2zxmloLwxDnFQOUpaUwnjC8dZpdh+gMrZVjL2ZL2gVreaV4aUtCHF+GD1lvQTStCrE5kIiwio41nh3yjivpKqBiA5/IWS42+8ODLDWeC8Uq0lIGPFNpU82VFMAbnrYO3+HlJ393GSGJUMg1KRO0qDU7oVUJ5yNDfExhnzPKwUoxJWr3HMUAL2lAq0ITNaTxveanPndUmxtBeJACL8bvRQri9DgNIetcm1HYdp+w3kOMmgkHBW8BsInbhHX0Ge39EkGeRDI0DD4YucfLgTLOD2VU7QTRkNSgj7JkAogMHIIsK+DSwEZPR+JpPJZDKZTG7XEwq7GG6wi4Er/n+J7VJO0Wgk4Vf5L6CD5A+G4BPe8JfzjgAAAABJRU5ErkJggg==)"]

["url(data:image/jpeg;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAChCAMAAADZe1I7AAAAMFBMVEX////t9PT/+OH/8cf/3nz/++///vlSkpMDAwP/wQOArKuox8jJ0sb3+fnY5ubl7u5WDST4AAAFP0lEQVR4Xuzay67bMAxFUYEv2U5u+/9/WztOcvyi26FKagMZcbRABQIMlXYTKUmTceS0ctizyWHPJoc9mzypnSHPZuclGUfhpX65panTM9bpGev0jHV6xjo9WZ1uZqF9vV6vR8xMRGqm+W63/llWLBudP/KSLk552js9pd3mFjrLbJdU7DddzORy70YuQG9G2rgbdLE5ubreRFye/wchoabhiNgM9i3eZPToNLp0EtH/Qq6vLu0qo0en0aWTNEwHexfs4Dk+vhnJnLUt14vedshHIUYK+XFkW7mQfiNtV05zO7uafXkIezbxRyznGpXTt6+dzRb7lU/+Rldpnw74CW9L5WOXbVxgP4yobO28rS064LtAv3lRdz8yWdKCGpf7dimu3VknN06HnLlWZtg39MIO/f5BAjdMV9CZeRqGiZkPa38rQD/bubh2bX7pvMpXO1+svTC7APFHTO3SIX8Mrx6wgx6r49Kfw7sn6KrB6ZDDnoFOS6sc9v2Jjyg3LH3YhbXbUmj6cCgPfTiVhM71TK+cgg75pprkwK8915ttjeLSy7/TS0R6p9OZTgno6tMV9Jh2nw557BMPOs57p8e0K+ygQ66Qx6XTlk4Z6LAT6Du5lfhrpw+dgi8ddNhXOuTB6XZHt/h0PdMV9NgnXo90xXkPmsEOOuSdHjKDHXTIk9AVdE1Ch11XukIOeng7zWWR+w/nLD7dsVseul3LrWSwA6+WQO6/jL6n/3o8Y9nRvfz3VGud4tp9+U99FXrvDmCq9bH8Slz7n3LNbcWVHIai2y+zQdf//9uhET2mIERVfTpnqNJ6CqAAC8mSIwevSdIAUu4ubWb6hXxBsu/tSgJGBm6O8kjjXerISvqz3E99IYRMQPM57l0uXQEEvwggyIe49+outJptNCBJOp7jLl3cqnCDVeqf4d5nvQJcWCjGqCOq1OOJ5pS3HQ5SJZ9Cij3FvKlhF+oueQALjzFXfatuJLOCK+ZB5oA2WadgT7YnmXcZjYqCsPL/q6zEaSIuxvbm5W5vI7PUGfhdUs/7BO1qbG8O6KvQJaILVfIOoarh19XPuwepV2N7c+CF1eIXWSUv9pGTnnrePUjq1djeHPjn1U6GpOwhuD6jrnZeh+JXYlvz1zgpUmEuFf8hdTU/rUNZF2L9J+auQa7vFuf6ocGWWvhpHUpeiF3XzSvPe6oXn1PXdVqHjAuxecl8q6+mt1xivSL0mzxYvkK53a/G9uYu3zlOkrQ91f8cbUhs2GA/itXuwh67ZAS/WPLaEed1qD+K1TcVrKV++BykPUQdqu+O+A6Umg5QwyMKvscDxdrF8oA217OUFD+e/DsOt+vmflhWNR3uTleaHjmcj2xOyn0usj2LVK8NJFwBa8xv8/Olx4WOVSVvVDTc5Edr/6TmsuBW7Y26mnN+j1VFj9LqEltI0x1vs6DqWSRTdprXX3tjyY+vJXv1Y1tIUgwjsG1eeGIITpKJgdRiQjCPfYebh1JcSDoAs2HujqySTzIwhYi9ldHgHPWU2mzvE6+jejsdAHyUOYzccy1lTpd3Vwp04FxzEaECNdcGsV8jFkkZeH+VvXqdRFZ3H1nyVhWPNSntoZr7HRVGwwyWVIfb76iBGTgL3VvbKQhJIcnYJT+DJGUh9t/7A1PQko1Ke9AwTR3CmmyYg7ASbbM6nDlg3wNtknq9q+X+X5gNMiejhpsuI+mT5rl5pX3cNkrWcS81KOmJIkblHHlIcwbmEP+pO4YRJMuchmGQ5axkDnxLzmrvPrDiKTLyJV1ZKOYhY80BE5HA/8G//wN70b2bHBkAAAAASUVORK5CYII=)","url(data:image/jpeg;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANMAAAA8CAMAAADLy3+8AAAAMFBMVEX///9/frjX1+inp81WUaW6udfGx97q6fIbDJDr+PfE7Onc9PLN7+zT8e/0+vu56eUR9HoqAAAEp0lEQVR4XryXzQ7DIAyDfc0fe/+3XTeph4YGI5D4jiSo2HMQA+TzRNDhzw7FD30uOjr6JsMf+czj4PATI1GozqsNYDsVpzS1fGQiOuplslOOaUIkN4nmVrhN3XKc04ScraFkq0JrzKx2UpMla0Zma10hXhlOaoIOJipSjZRqq3BWkwy8SSUyL7VTdlgTvHTcipngRUnJXNMkWCU7TmaiqMbAJ1nTZFgnjwabCV5uyaUlTYoNWuG4FmbTmYGNYlnBHiccPhpSu8YadCVCvpU84njwn2ncIao5lBwjydu8z1u/Fnyb48b1B/GbvsJ28V5A8E/AX3uaX6gq8Zv8M9lG+jts5hPy2iRxcYuS1SfaPpEl2FS4463LLv6i5g8n28PE45yyIFPbvqyX65brIAiFQckFCfb93/aUkIacrprRzuwfNWp15RPc0cLWMiGtK2EuO1QdzLzyVFdwx4PP3JkJekEqCpBoPfSw7JOBLCmuzlHjfl6014P+Y6rLiUSWfL2ZV1ybS+GvxN+duySYNmU0minNGbNuW2HoUd0OIlUxVfgzbS0muNWVSSxCFaAyi3YvuOh2EjHzONJ4oLjLhYNpAYMypgpgDQBR+uO04Eq5Qs30LNX4ffC0ZLr0vPCWbAmAE8QUqSLtM+49r4fcMuZBXy0XJtpzz5lUoMWUyep0GAqKqAXp7IgecFkt6jGFVabrsqWGMY9ezPjCNPkrYWIRhQbTKTrKSUy8fuhxBlwJ0erzyUTnjOTtyRrv/Dyk3RuxlE0EVxeK8A0TJdyLeTYu5JOJJmuJHmeYk/1E3bnRa9navciNNBo/S/LJpMIzORQJ3DAtsBypkqw0JuZrS3pf+JSz1YMJz83m7WjTdtmEDDimMQnX2WOV75jeepiFnenzGHMM13VZXE6TwKPVE6guY63XQJmVGxWNMJlqk6k6UTDF08slskV16rPzrf9sE0zgrzfE1IhT7JgELSZzCbL/1M7PLncHyo4CSbjWM8XDYNOvmMjft8mU3QfxLkzjx345woQrTinlsCwMD/vAVJ9yJpEGU7jK3GRa1l3z7W4av3EeTJH4tJy57rplkqeaTL4wuDaZYO+j++PouE3IzvQIpAQu8mr+yPTKODG1PSL5HNRi8hDmlnsNfnVDvp/m7GsaDnQc3KYPTM6yl6rK0GSChGYSYQPvTHVtOIQ+GuKB5FMx9YxgET319aUpcg+H7k+llynuQB1WqbqFylbhay2GRPUng9DhQL3cfFcHk4FcxPC1cpx278Kkb3urh8mhXAo/SQInBgwrrBX/NWsGKRCEMBAElmWJ0fj/3y7McZQapCeQ/KCwCZjqR69r99vYgRcGppzb1+/6si2znvPidJ8fCb4A4Xo+n2886xpfLEN/l6mBj0u6r2zSYQKTrjB0r+EbzCYzcXlGH85CbDinC0ypCoOzwJ2ikJjyk4cGPUjz6kzn2lb3NB19vM50QxoG85amMeoU6UxjJpc+YMFBK0xh8pnCxPk2WLo6U8wUJt6sjYIyZKaWw8RhMBb8KtNMY8J40UP1uky0BhjZKjNBV5eYW1Um7i1xNr0yE3TfUR5GdaatP+OH6rWZ/usREj10r/sZAAAAAElFTkSuQmCC)"]