﻿
{"id":4878,"date":"2016-09-11T12:28:11","date_gmt":"2016-09-11T12:28:11","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4878"},"modified":"2016-09-11T12:28:11","modified_gmt":"2016-09-11T12:28:11","slug":"cta-icomparer-interfacei-ile-nesneleri-siralama","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-icomparer-interfacei-ile-nesneleri-siralama\/","title":{"rendered":"C#&#8217;ta IComparer Interface&#8217;i \u0130le Nesneleri S\u0131ralama"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>\u00d6nceki yaz\u0131lar\u0131mdan <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-icomparable-interfacei-ile-nesneleri-siralama\/\" target=\"_blank\">C#\u2019ta IComparable Interface\u2019i \u0130le Nesneleri S\u0131ralama<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131mda nesnelerin s\u0131ralanabilmesi i\u00e7in IComparable interface&#8217;i ile bir s\u0131ralama algoritmas\u0131 belirlemi\u015ftik. E\u011fer ilgili yaz\u0131y\u0131 okuduysan\u0131z IComparable interface&#8217;i ile kendi olu\u015fturdu\u011fumuz s\u0131n\u0131flar \u00fczerinde s\u0131ralama algoritmas\u0131 olu\u015fturabilece\u011fimizi g\u00f6rm\u00fc\u015fs\u00fcn\u00fcz demektir. Ya da bir ba\u015fka deyi\u015fle IComparable interface&#8217;i ile kaynak koduna eri\u015febildi\u011fimiz s\u0131n\u0131flar \u00fczerinde s\u0131ralama algoritmalar\u0131 in\u015fa edebilmekteyiz.<\/p>\n<p><em>Peki&#8230;<\/em><\/p>\n<p>E\u011fer ki, kendimizin olu\u015fturmad\u0131\u011f\u0131 ya da kaynak koduna eri\u015femedi\u011fimiz s\u0131n\u0131flar \u00fczerinde bir s\u0131ralama algoritmas\u0131 belirlemek istersek bunu IComparable interface&#8217;i ile ger\u00e7ekle\u015ftiremeyece\u011fimiz a\u015fikard\u0131r. \u0130\u015fte b\u00f6yle bir durumda IComparer interface&#8217;ini devreye sokabilir, istedi\u011finiz tipte nesneler \u00fczerinde istedi\u011finiz s\u0131ralama algoritmas\u0131 olu\u015fturabilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class At\r\n    {\r\n        public string Adi { get; set; }\r\n        public decimal YarisTamamlamaSuresi { get; set; }\r\n    }\r\n<\/pre>\n<p>\u015eimdi yukar\u0131daki s\u0131n\u0131f\u0131 ele alal\u0131m. Varsayal\u0131m ki, bu s\u0131n\u0131f\u0131n kaynak kodlar\u0131 elimizde de\u011fil. Eee, s\u0131n\u0131f i\u00e7erisinde bir s\u0131ralama algoritmas\u0131 da belirlenmedi\u011fine g\u00f6re bu s\u0131n\u0131f tipinden bir koleksiyonu s\u0131ralamaya \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131zda belliki hatayla kar\u015f\u0131la\u015faca\u011f\u0131z&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            List&lt;At&gt; Atlar = new List&lt;At&gt;()\r\n            {\r\n                new At { Adi = &quot;G\u00fclazer&quot;, YarisTamamlamaSuresi = 30 },\r\n                new At { Adi = &quot;R\u0131fk\u0131&quot;, YarisTamamlamaSuresi = 32 },\r\n                new At { Adi = &quot;\u015euayip&quot;, YarisTamamlamaSuresi = 13 },\r\n                new At { Adi = &quot;Faruk&quot;, YarisTamamlamaSuresi = 31 },\r\n                new At { Adi = &quot;Nazl\u0131&quot;, YarisTamamlamaSuresi = 11 },\r\n                new At { Adi = &quot;Yonca&quot;, YarisTamamlamaSuresi = 23 }\r\n            };\r\n\r\n            Atlar.ForEach(a =&gt; Console.WriteLine($&quot;{a.Adi} {a.YarisTamamlamaSuresi}&quot;));\r\n            Atlar.Sort();\r\n            Console.WriteLine(&quot;*****************&quot;);\r\n            Atlar.ForEach(a =&gt; Console.WriteLine($&quot;{a.Adi} {a.YarisTamamlamaSuresi}&quot;));\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015eeklinde bir \u00e7al\u0131\u015fma sergilersek beklenildi\u011fi gibi a\u015fa\u011f\u0131daki hatayla kar\u015f\u0131la\u015f\u0131lmaktad\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/Cta-IComparer-Interfacei-\u0130le-Nesneleri-S\u0131ralama.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/Cta-IComparer-Interfacei-\u0130le-Nesneleri-S\u0131ralama-300x59.png\" alt=\"C#&#039;ta IComparer Interface&#039;i \u0130le Nesneleri S\u0131ralama\" width=\"300\" height=\"59\" class=\"aligncenter size-medium wp-image-4883\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/Cta-IComparer-Interfacei-\u0130le-Nesneleri-S\u0131ralama-300x59.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/Cta-IComparer-Interfacei-\u0130le-Nesneleri-S\u0131ralama.png 606w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u015eimdi gelin IComparer interface&#8217;i ile &#8220;YarisTamamlamaSuresi&#8221; propertysine g\u00f6re s\u0131ralama algoritmas\u0131 olu\u015ftural\u0131m.<\/p>\n<p>Bu i\u015flemi yapabilmek i\u00e7in &#8220;At&#8221; s\u0131n\u0131f\u0131na \u00f6zel bir Comparer s\u0131n\u0131f\u0131 olu\u015fturaca\u011f\u0131z ve IComparer Interface&#8217;ini bu s\u0131n\u0131fa uygulayaca\u011f\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class AtComparer : IComparer&lt;At&gt;\r\n    {\r\n        public int Compare(At x, At y)\r\n        {\r\n            return x.YarisTamamlamaSuresi.CompareTo(y.YarisTamamlamaSuresi);\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;AtComparer&#8221; s\u0131n\u0131f\u0131, IComparer Interface&#8217;ini uygulad\u0131\u011f\u0131 zaman &#8220;Compare&#8221; isimli metodumuz gelmektedir. Bu metod, iki &#8220;At&#8221; tipinden nesneyi k\u0131yaslayarak geriye sonu\u00e7 d\u00f6necektir. T\u0131pk\u0131 IComparable Interface&#8217;ini uygulad\u0131\u011f\u0131m\u0131zda gelen &#8220;CompareTo&#8221; metodunda oldu\u011fu gibi &#8220;Compare&#8221; metodunda da d\u00f6nen sonu\u00e7;<\/p>\n<ul>\n<li>Negatif bir de\u011ferse, x nesnesi y nesnesinden k\u00fc\u00e7\u00fck<\/li>\n<li>S\u0131f\u0131ra e\u015fitse, x nesnesi y nesnesine e\u015fit<\/li>\n<li>S\u0131f\u0131rdan b\u00fcy\u00fck ise, x nesnesi y nesnesinden b\u00fcy\u00fck<\/li>\n<\/ul>\n<p>olarak de\u011ferlendirilmektedir.<\/p>\n<p>S\u0131ralama algoritma i\u015flemini y\u00fcr\u00fctecek &#8220;AtComparer&#8221; s\u0131n\u0131f\u0131m\u0131z\u0131 olu\u015fturduktan sonra s\u0131ra ilk verdi\u011fimiz kod blo\u011funu g\u00fcncellemeye gelmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            List&lt;At&gt; Atlar = new List&lt;At&gt;()\r\n            {\r\n                new At { Adi = &quot;G\u00fclazer&quot;, YarisTamamlamaSuresi = 30 },\r\n                new At { Adi = &quot;R\u0131fk\u0131&quot;, YarisTamamlamaSuresi = 32 },\r\n                new At { Adi = &quot;\u015euayip&quot;, YarisTamamlamaSuresi = 13 },\r\n                new At { Adi = &quot;Faruk&quot;, YarisTamamlamaSuresi = 31 },\r\n                new At { Adi = &quot;Nazl\u0131&quot;, YarisTamamlamaSuresi = 11 },\r\n                new At { Adi = &quot;Yonca&quot;, YarisTamamlamaSuresi = 23 }\r\n            };\r\n\r\n            Atlar.ForEach(a =&gt; Console.WriteLine($&quot;{a.Adi} {a.YarisTamamlamaSuresi}&quot;));\r\n            Atlar.Sort(new AtComparer());\r\n            Console.WriteLine(&quot;*****************&quot;);\r\n            Atlar.ForEach(a =&gt; Console.WriteLine($&quot;{a.Adi} {a.YarisTamamlamaSuresi}&quot;));\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>Dikkat ederseniz 16. sat\u0131rdaki &#8220;Atlar.Sort&#8221; metodu g\u00fcncellenerek s\u0131ralama esnas\u0131nda uygulayaca\u011f\u0131 algoritmay\u0131 belirtmekteyiz.<\/p>\n<p>Son ad\u0131m olarak projemizi derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda a\u015fa\u011f\u0131daki gibi \u00e7\u0131kt\u0131 almaktay\u0131z.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/Cta-IComparer-Interfacei-\u0130le-Nesneleri-S\u0131ralama-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/Cta-IComparer-Interfacei-\u0130le-Nesneleri-S\u0131ralama-1.png\" alt=\"C#&#039;ta IComparer Interface&#039;i \u0130le Nesneleri S\u0131ralama\" width=\"158\" height=\"256\" class=\"aligncenter size-full wp-image-4889\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi belirledi\u011fimiz algoritmaya g\u00f6re Source Code&#8217;u gizli olan s\u0131n\u0131flarda s\u0131ralama i\u015flemini ger\u00e7ekle\u015ftirmi\u015f olduk.<\/p>\n<p>Faydalanman\u0131z dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, \u00d6nceki yaz\u0131lar\u0131mdan C#\u2019ta IComparable Interface\u2019i \u0130le Nesneleri S\u0131ralama ba\u015fl\u0131kl\u0131 yaz\u0131mda nesnelerin s\u0131ralanabilmesi i\u00e7in IComparable interface&#8217;i ile bir s\u0131ralama algoritmas\u0131 belirlemi\u015ftik. E\u011fer ilgili yaz\u0131y\u0131 okuduysan\u0131z IComparable interface&#8217;i ile kendi olu\u015fturdu\u011fumuz s\u0131n\u0131flar \u00fczerinde s\u0131ralama algoritmas\u0131&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[1075,1073,1411,168],"class_list":["post-4878","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","tag-c-nesneleri-siralama","tag-icomparable","tag-icomparer","tag-interface"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=4878"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4878\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3223"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}