﻿
{"id":4035,"date":"2016-04-15T12:10:24","date_gmt":"2016-04-15T12:10:24","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4035"},"modified":"2016-04-15T12:10:24","modified_gmt":"2016-04-15T12:10:24","slug":"cta-icomparable-interfacei-ile-nesneleri-siralama","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-icomparable-interfacei-ile-nesneleri-siralama\/","title":{"rendered":"C#&#8217;ta IComparable Interface&#8217;i \u0130le Nesneleri S\u0131ralama"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, kendisini uygulayan s\u0131n\u0131fta kendi tipindeki nesnelere kar\u015f\u0131 nas\u0131l bir kar\u015f\u0131la\u015ft\u0131rma yap\u0131laca\u011f\u0131n\u0131 belirlemek i\u00e7in kullan\u0131lan IComparable Interface&#8217;ine de\u011finece\u011fiz.<\/p>\n<p>IComparable Interface&#8217;i, miras alan s\u0131n\u0131fa CompareTo metodunu uygulatmakta ve bu metot arac\u0131l\u0131\u011f\u0131yla kar\u015f\u0131la\u015ft\u0131rmay\u0131 sa\u011flamaktad\u0131r.<\/p>\n<p>Biliyoruz ki, Array s\u0131n\u0131f\u0131n\u0131n static Sort metodu ile elimizdeki de\u011fer tipli verileri yani basit veri tiplerini s\u0131ralabiliyoruz. Lakin referans tipli verileri yani nesneleri s\u0131ralamaya \u00e7al\u0131\u015f\u0131rken ilgili fonksiyonu kullanam\u0131yoruz. Bunun sebebi, nesnelerin hangi \u00f6zelli\u011fine g\u00f6re s\u0131ralama i\u015flemi yapaca\u011f\u0131n\u0131 Array.Sort metodunun bilememesidir.<\/p>\n<p>\u015eimdi bu bahsettiklerimizi a\u015fa\u011f\u0131da teknik olarak ele alal\u0131m&#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            int&#x5B;] Sayilar =  { 3, 325, 34, 53, 46, 37, 54, 53, 543, 574574523, 564574, 56 };\r\n            foreach (var item in Sayilar)\r\n            {\r\n                Console.Write(item + &quot;, &quot;);\r\n            }\r\n            Console.WriteLine(&quot;&quot;);\r\n            Array.Sort(Sayilar);\r\n            foreach (var item in Sayilar)\r\n            {\r\n                Console.Write(item + &quot;, &quot;);\r\n            }\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-icomparable-interfacei-ile-nesneleri-siralama\/cta-icomparable-interfacei-ile-nesneleri-siralama\/\" rel=\"attachment wp-att-4036\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4036\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-IComparable-Interfacei-\u0130le-Nesneleri-S\u0131ralama.png\" alt=\"C#'ta IComparable Interface'i \u0130le Nesneleri S\u0131ralama\" width=\"470\" height=\"40\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-IComparable-Interfacei-\u0130le-Nesneleri-S\u0131ralama.png 470w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-IComparable-Interfacei-\u0130le-Nesneleri-S\u0131ralama-300x26.png 300w\" sizes=\"auto, (max-width: 470px) 100vw, 470px\" \/><\/a><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, basit verilerden olu\u015fan veri k\u00fcmesinde Array.Sort ile net bir \u015fekilde s\u0131ralama i\u015flemimizi ger\u00e7ekle\u015ftirebiliyoruz.<\/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            Ogrenci&#x5B;] Ogrenciler =\r\n                {\r\n                new Ogrenci(&quot;Hilmi&quot;, &quot;Celayir&quot;, 39, true),\r\n                new Ogrenci(&quot;Ay\u015fe&quot;, &quot;Y\u0131lmaz&quot;, 24, false),\r\n                new Ogrenci(&quot;Ali&quot;, &quot;\u00c7ukurambar&quot;, 32, true),\r\n                new Ogrenci(&quot;Veli&quot;, &quot;Pursaklar&quot;, 13, true),\r\n                new Ogrenci(&quot;Mustafa&quot;, &quot;Ceceli&quot;, 23, true)\r\n                };\r\n\r\n            foreach (var item in Ogrenciler)\r\n            {\r\n                Console.Write(item.Adi + &quot;, &quot;);\r\n            }\r\n            Console.WriteLine(&quot;&quot;);\r\n            Array.Sort(Ogrenciler);\r\n            foreach (var item in Ogrenciler)\r\n            {\r\n                Console.Write(item.Adi + &quot;, &quot;);\r\n            }\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-icomparable-interfacei-ile-nesneleri-siralama\/cta-icomparable-interfacei-ile-nesneleri-siralama-2\/\" rel=\"attachment wp-att-4038\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4038\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-IComparable-Interfacei-\u0130le-Nesneleri-S\u0131ralama-1.png\" alt=\"C#'ta IComparable Interface'i \u0130le Nesneleri S\u0131ralama\" width=\"678\" height=\"186\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-IComparable-Interfacei-\u0130le-Nesneleri-S\u0131ralama-1.png 678w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-IComparable-Interfacei-\u0130le-Nesneleri-S\u0131ralama-1-300x82.png 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><br \/>\nMevzu bahis nesneleri s\u0131ralamaya gelince yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz hatay\u0131 almaktay\u0131z.<\/p>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><em><strong>An unhandled exception of type &#8216;System.InvalidOperationException&#8217; occurred in mscorlib.dll<\/strong><\/em><\/span><\/p>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><em><strong>Additional information: Dizideki iki \u00f6\u011fe kar\u015f\u0131la\u015ft\u0131r\u0131lamad\u0131.<\/strong><\/em><\/span><\/p>\n<p>Bu hatay\u0131 almam\u0131z\u0131n sebebi, yukar\u0131daki sat\u0131rlarda bahsetti\u011fim gibi ilgili nesnenin hangi \u00f6zelli\u011fine g\u00f6re s\u0131ralama yap\u0131laca\u011f\u0131n\u0131n bilinememesinden kaynaklanmaktad\u0131r.<\/p>\n<p>\u015eimdi ilgili Ogrenci s\u0131n\u0131f\u0131m\u0131za IComparable Interface&#8217;ini uygulayarak s\u0131ralama kural\u0131n\u0131 belirleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Ogrenci : IComparable\r\n    {\r\n        public string Adi { get; set; }\r\n        public string SoyAdi { get; set; }\r\n        public int Yas { get; set; }\r\n        public bool Cinsiyet { get; set; }\r\n        public Ogrenci(string Adi, string SoyAdi, int Yas, bool Cinsiyet)\r\n        {\r\n            this.Adi = Adi;\r\n            this.SoyAdi = SoyAdi;\r\n            this.Yas = Yas;\r\n            this.Cinsiyet = Cinsiyet;\r\n        }\r\n\r\n        public int CompareTo(object obj)\r\n        {\r\n            Ogrenci DigerOgrenci = obj as Ogrenci;\r\n            int Sonuc = 0;\r\n            if (DigerOgrenci != null)\r\n            {\r\n                if (this.Yas &gt; DigerOgrenci.Yas)\r\n                    Sonuc = 1;\r\n                else if (this.Yas == DigerOgrenci.Yas)\r\n                    Sonuc = 0;\r\n                else\r\n                    Sonuc = -1;\r\n            }\r\n            return Sonuc;\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki Ogrenci s\u0131n\u0131f\u0131n\u0131 incelerseniz e\u011fer CompareTo metodu i\u00e7erisinde di\u011fer nesneleri temsil eden object tipinde bir &#8220;obj&#8221; isimli parametre gelmektedir. Yap\u0131lan kontrol neticesinde o anki nesneyle, di\u011fer nesneler aras\u0131nda belirli \u00f6zelli\u011fe g\u00f6re kar\u015f\u0131la\u015ft\u0131rma yap\u0131lmakta ve kar\u015f\u0131la\u015ft\u0131rman\u0131n sonucu geriye int tipinde bir de\u011fer olarak d\u00f6nd\u00fcr\u00fclmektedir.<\/p>\n<p>Burada bilmeniz gereken s\u0131ralama algoritmas\u0131n\u0131n .NET a\u00e7\u0131s\u0131ndan nas\u0131l de\u011ferlendirildi\u011fidir. E\u011fer d\u00f6nen sonu\u00e7;<\/p>\n<ul>\n<li>Negatif bir de\u011ferse, bu nesne di\u011fer nesneden k\u00fc\u00e7\u00fck<\/li>\n<li>S\u0131f\u0131ra e\u015fitse, bu nesne ile di\u011fer nesne e\u015fit<\/li>\n<li>S\u0131f\u0131rdan b\u00fcy\u00fck ise, bu nesne di\u011fer nesneden b\u00fcy\u00fck<\/li>\n<\/ul>\n<p>olarak de\u011ferlendirilmektedir.<\/p>\n<p>IComparable Interface&#8217;ini uygulad\u0131ktan sonra a\u015fa\u011f\u0131daki gibi s\u0131k\u0131nt\u0131s\u0131z bir \u015fekilde Array.Sort metoduyla s\u0131ralama ger\u00e7ekle\u015ftirebiliriz.<\/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            Ogrenci&#x5B;] Ogrenciler =\r\n                {\r\n                new Ogrenci(&quot;Hilmi&quot;, &quot;Celayir&quot;, 39, true),\r\n                new Ogrenci(&quot;Ay\u015fe&quot;, &quot;Y\u0131lmaz&quot;, 24, false),\r\n                new Ogrenci(&quot;Ali&quot;, &quot;\u00c7ukurambar&quot;, 32, true),\r\n                new Ogrenci(&quot;Veli&quot;, &quot;Pursaklar&quot;, 13, true),\r\n                new Ogrenci(&quot;Mustafa&quot;, &quot;Ceceli&quot;, 23, true)\r\n                };\r\n\r\n            foreach (var item in Ogrenciler)\r\n            {\r\n                Console.Write(item.Adi + &quot;, &quot;);\r\n            }\r\n            Console.WriteLine(&quot;&quot;);\r\n            Array.Sort(Ogrenciler);\r\n            foreach (var item in Ogrenciler)\r\n            {\r\n                Console.Write(item.Adi + &quot;, &quot;);\r\n            }\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>Nihayetinde yukar\u0131 sat\u0131rlarda hata veren bu kod blo\u011fu IComparable Interface&#8217;ini implement ettikten sonra hatas\u0131z \u00e7al\u0131\u015facakt\u0131r. Array.Sort metodu otomatik olarak CompareTo metodunu g\u00f6recek ve ilgili metod \u00fczerinde s\u0131ralama algoritmas\u0131 neticesinde \u00e7\u0131kt\u0131 verecektir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-icomparable-interfacei-ile-nesneleri-siralama\/cta-icomparable-interfacei-ile-nesneleri-siralama-3\/\" rel=\"attachment wp-att-4046\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Cta-IComparable-Interfacei-\u0130le-Nesneleri-S\u0131ralama-2.png\" alt=\"C#&#039;ta IComparable Interface&#039;i \u0130le Nesneleri S\u0131ralama\" width=\"252\" height=\"41\" class=\"aligncenter size-full wp-image-4046\" \/><\/a><\/p>\n<p>Ek olarak .NET i\u00e7erisinde \u00f6n tan\u0131ml\u0131 \u00e7o\u011fu tip IComparable Interface&#8217;ini uygulad\u0131klar\u0131 i\u00e7in CompareTo metodunu a\u015fa\u011f\u0131daki gibide kullanabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public int CompareTo(object obj)\r\n        {\r\n            Ogrenci DigerOgrenci = obj as Ogrenci;\r\n            int Sonuc = 0;\r\n            if (DigerOgrenci != null)\r\n            {\r\n                Sonuc = Yas.CompareTo(DigerOgrenci.Yas);\r\n            }\r\n            return Sonuc;\r\n        }\r\n<\/pre>\n<p>Nihayetinde yukar\u0131daki manevrada ayn\u0131 sonucu verecektir.<\/p>\n<p>Okudu\u011funuz i\u00e7in te\u015fekk\u00fcr ederim&#8230;<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\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, Bu i\u00e7eri\u011fimizde, kendisini uygulayan s\u0131n\u0131fta kendi tipindeki nesnelere kar\u015f\u0131 nas\u0131l bir kar\u015f\u0131la\u015ft\u0131rma yap\u0131laca\u011f\u0131n\u0131 belirlemek i\u00e7in kullan\u0131lan IComparable Interface&#8217;ine de\u011finece\u011fiz. IComparable Interface&#8217;i, miras alan s\u0131n\u0131fa CompareTo metodunu uygulatmakta ve bu metot arac\u0131l\u0131\u011f\u0131yla kar\u015f\u0131la\u015ft\u0131rmay\u0131 sa\u011flamaktad\u0131r.&#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,338,720],"tags":[1076,1074,1075,1072,1073],"class_list":["post-4035","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","category-c-5-0","category-c-6-0","tag-array-sort","tag-c-icomparable","tag-c-nesneleri-siralama","tag-compareto","tag-icomparable"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4035","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=4035"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4035\/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=4035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}