﻿
{"id":16246,"date":"2020-06-18T11:01:05","date_gmt":"2020-06-18T11:01:05","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=16246"},"modified":"2020-06-27T15:12:09","modified_gmt":"2020-06-27T15:12:09","slug":"arraysegment-ve-stringsegment-turleri-ve-kullanimlari","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/arraysegment-ve-stringsegment-turleri-ve-kullanimlari\/","title":{"rendered":"ArraySegment<T> ve StringSegment T\u00fcrleri ve Kullan\u0131mlar\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde bir referans taraf\u0131ndan i\u015faretlenmi\u015f dizi(array) \u00fczerindeki bir aral\u0131\u011fa farkl\u0131 bir referans ile sahip olmam\u0131z\u0131 sa\u011flayan ArraySegment&lt;T&gt; ve onun string t\u00fcrlerine kar\u015f\u0131l\u0131k muadili olan StringSegment t\u00fcrlerini inceliyor olaca\u011f\u0131z.<\/p>\n<h3>Nedir bu ArraySegment&lt;T&gt; ve StringSegment T\u00fcrleri?<\/h3>\n<p>Bu t\u00fcrler yap\u0131sal olarak dizi yahut string ifadelerdeki bir b\u00f6l\u00fcm\u00fc temsil etmemizi sa\u011flayan ve b\u00fct\u00fcnsel a\u00e7\u0131dan ilgili veri k\u00fcmesini par\u00e7a par\u00e7a birden fazla referans e\u015fli\u011finde y\u00f6netmemize imkan veren struct t\u00fcrleridir.<\/p>\n<h4>ArraySegment&lt;T&gt;<\/h4>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/06\/ArraySegment-ve-StringSegment-T\u00fcrleri-ve-Kullan\u0131mlar\u0131.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/06\/ArraySegment-ve-StringSegment-T\u00fcrleri-ve-Kullan\u0131mlar\u0131.jpg\" alt=\"ArraySegment&lt;T&gt; ve StringSegment T\u00fcrleri ve Kullan\u0131mlar\u0131\" width=\"846\" height=\"248\" class=\"aligncenter size-full wp-image-16262\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/06\/ArraySegment-ve-StringSegment-T\u00fcrleri-ve-Kullan\u0131mlar\u0131.jpg 846w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/06\/ArraySegment-ve-StringSegment-T\u00fcrleri-ve-Kullan\u0131mlar\u0131-300x88.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/06\/ArraySegment-ve-StringSegment-T\u00fcrleri-ve-Kullan\u0131mlar\u0131-768x225.jpg 768w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/a><br \/>\nBir dizinin b\u00fct\u00fcn\u00fcnden ziyade belirli bir k\u0131sm\u0131na yahut par\u00e7as\u0131na ihtiya\u00e7 dahilinde ilgili diziyi kopyalamak yerine(ki g\u00f6rece olduk\u00e7a maliyetli bir operasyondur) ba\u011f\u0131ms\u0131z bir referans ile eri\u015fmemizi ve b\u00f6ylece salt bir \u015fekilde temsil etmemizi sa\u011flayan bir yap\u0131d\u0131r.<\/p>\n<p>ArraySegment&lt;T&gt; olu\u015fturabilmek i\u00e7in a\u015fa\u011f\u0131daki gibi var olan bir dizi \u00fczerinden de\u011fer \u00fcretilmesi yeterlidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int&#x5B;] number = { 3, 5, 7, 9, 11 };\r\n            ArraySegment&lt;int&gt; segment1 = new ArraySegment&lt;int&gt;(number);\r\n            \/\/segment1 : 3 5 7 9 11\r\n            ArraySegment&lt;int&gt; segment2 = new ArraySegment&lt;int&gt;(number, 2, 2);\r\n            \/\/segment2 : 7 9\r\n<\/pre>\n<p>Olu\u015fturulan ArraySegment, operasyonel olarak referans etti\u011fi dizinin t\u00fcketti\u011fi par\u00e7as\u0131na dair offset de\u011feriyle birlikte bir\u00e7ok bilgisini bizlere sunmaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int&#x5B;] number = { 3, 5, 7, 9, 11 };\r\n            ArraySegment&lt;int&gt; segment = new ArraySegment&lt;int&gt;(number, 2, 2);\r\n            Console.WriteLine(segment.Offset); \/\/2\r\n            Console.WriteLine(segment.Count); \/\/2\r\n            Console.WriteLine(segment.Array.Length); \/\/5\r\n<\/pre>\n<p>B\u00f6ylece manevratik algoritmalar i\u00e7in gerekli kritik bilgilere eri\u015febilmekteyiz.<\/p>\n<p>Ayr\u0131ca yukar\u0131da 5. sat\u0131rda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere ArraySegment t\u00fcr\u00fcn\u00fcn &#8216;Array&#8217; propertysi orjinal datay\u0131 bizlere getirmektedir. Buradan anlayaca\u011f\u0131m\u0131z b\u00fct\u00fcnsel olarak bir dizinin bir alan\u0131n\u0131 temsil eden bu ArraySegment nesnesi esas\u0131nda arkaplanda yine ayn\u0131 array&#8217;i kaynak olarak kullanmakta ve s\u00fcre\u00e7te ger\u00e7ekle\u015fen t\u00fcm de\u011fersel operasyonlar ana array&#8217;e fiziksel olarak yans\u0131t\u0131lmaktad\u0131r.<\/p>\n<p>\u015e\u00f6yle ki;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int&#x5B;] number = { 3, 5, 7, 9, 11 };\r\n            ArraySegment&lt;int&gt; segment = new ArraySegment&lt;int&gt;(number, 2, 2);\r\n            segment&#x5B;0] = 100;\r\n            segment&#x5B;1] = 200;\r\n\r\n            for (int i = 0; i &lt; number.Length; i++)\r\n                Console.WriteLine(number&#x5B;i]);\r\n<\/pre>\n<p>\u015feklinde in\u015fa edilen komut \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda<\/p>\n<div style=\"text-align:center;\">\n<div style=\"background-color:black;color:white;text-align:center;width:100px;margin:auto;margin:auto;font-size:10px;line-height: 10px;\">\n3<br \/>\n5<br \/>\n100<br \/>\n200<br \/>\n11\n<\/div>\n<\/div>\n<p>\u00e7\u0131kt\u0131s\u0131n\u0131 vermektedir.<\/p>\n<p>E\u011fer ki kaynak array&#8217;in verilerini de\u011fi\u015ftirmek istemiyor ve orjinalli\u011fini korumak istiyorsan\u0131z array&#8217;in bir kopyas\u0131n\u0131 alman\u0131z gerekmektedir.<\/p>\n<p>ArraySegment t\u00fcrleri \u00fczerinde her t\u00fcrl\u00fc LINQ sorgular\u0131 \u00e7al\u0131\u015ft\u0131r\u0131labilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int&#x5B;] number = { 3, 5, 7, 9, 11 };\r\n            ArraySegment&lt;int&gt; segment = new ArraySegment&lt;int&gt;(number, 2, 2);\r\n            var data = segment.Where(n =&gt; n &gt; 7);\r\n<\/pre>\n<p>Ve ayriyetten datalar \u00fczerinde Slicing Support(Dilimleme Deste\u011fi) bulunmaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int&#x5B;] number = { 3, 5, 7, 9, 11 };\r\n            ArraySegment&lt;int&gt; segment = new ArraySegment&lt;int&gt;(number, 2, 2);\r\n            var p1 = segment.Slice(0, 1);\r\n            var p2 = segment.Slice(1, 1);\r\n<\/pre>\n<h4>StringSegment<\/h4>\n<p>StringSegment, ArraySegment&#8217;in string de\u011ferler nezdinde ki muadilidir diyebiliriz. Esas\u0131nda metinsel de\u011ferlerdeki bir\u00e7ok analitik operasyonlardan bizleri kurtarmakta ve Substring vs. gibi fonksiyonlar yerine string de\u011ferde hedef kesit \u00fczerinde i\u015flem yapmam\u0131z\u0131 sa\u011flamaktad\u0131r. B\u00f6ylece i\u015flem yapabilmek i\u00e7in yeni bir string de\u011fer \u00fcretilmeyece\u011finden dolay\u0131 bellekte yersiz bir alan tahsisine gerek kalmadan performansl\u0131 bir \u015fekilde i\u015flemlerimizi ger\u00e7ekle\u015ftirebilmekteyiz.<\/p>\n<p>StringSegment&#8217;i kullanabilmek i\u00e7in <code style=\"color:red;\"><strong>Microsoft.Extensions.Primitives<\/strong><\/code> namespace&#8217;inin using edilmesi gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            string text = &quot;doldur be meyhaneci, bo\u015f kalmas\u0131n kadehim...&quot;;\r\n            StringSegment segment1 = new StringSegment(text);\r\n            \/\/doldur be meyhaneci, bo\u015f kalmas\u0131n kadehim...\r\n            StringSegment segment2 = new StringSegment(text, 0, 5);\r\n            \/\/doldu\r\n            StringSegment segment3 = new StringSegment(text, 10, 10);\r\n            \/\/meyhaneci,\r\n<\/pre>\n<p>Nihai olarak;<\/p>\n<p>ArraySegment ve StringSegment elimizdeki array de\u011ferlerin bir b\u00f6l\u00fcm\u00fcn\u00fc temsil etmek ve b\u00f6ylece bellekte yersiz bir tahsis i\u015flemine gerek kalmaks\u0131z\u0131n i\u015flem ger\u00e7ekle\u015ftirebilmek i\u00e7in geli\u015ftirilmi\u015f struct&#8217;t\u0131rlar. \u0130\u00e7eri\u011fimizde de \u00f6rneklendirildi\u011fi \u00fczere genel ge\u00e7er dizisel i\u015flemlerde kullan\u0131ld\u0131klar\u0131 gibi elimizdeki dizinin belirli par\u00e7alar\u0131nda MultiThread \u00e7al\u0131\u015fmam\u0131z gereken uygulamalar yahut zamanlanm\u0131\u015f g\u00f6revlerde t\u00fcketilecek olan g\u00f6rev listesinin ayr\u0131 kesimlerinde i\u015flev ger\u00e7ekle\u015ftirilmesinden emin olunmas\u0131 gerekti\u011fi gibi kompleks noktalarda da g\u00fcven i\u00e7erisinde kullan\u0131labilmektedirler.<\/p>\n<blockquote style=\"color:purple;\"><p><strong>ArraySegment ve StringSegment yap\u0131lar\u0131 async metotlarda g\u00f6n\u00fcl rahatl\u0131\u011f\u0131yla kullan\u0131labilmektedirler.<\/strong><\/p><\/blockquote>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Kaynaklar<br \/>\nhttps:\/\/www.ilkayilknur.com\/arraysegment-ve-stringsegment-nedir-nasil-kullanilir<br \/>\nhttps:\/\/docs.microsoft.com\/tr-tr\/dotnet\/api\/system.arraysegment-1?view=netcore-3.1<br \/>\nhttps:\/\/stackoverflow.com\/questions\/4600024\/what-is-the-use-of-the-arraysegmentt-class<br \/>\nhttps:\/\/www.c-sharpcorner.com\/article\/c-sharp-arraysegment\/<\/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 bir referans taraf\u0131ndan i\u015faretlenmi\u015f dizi(array) \u00fczerindeki bir aral\u0131\u011fa farkl\u0131 bir referans ile sahip olmam\u0131z\u0131 sa\u011flayan ArraySegment&lt;T&gt; ve onun string t\u00fcrlerine kar\u015f\u0131l\u0131k muadili olan StringSegment t\u00fcrlerini inceliyor olaca\u011f\u0131z. Nedir bu ArraySegment&lt;T&gt; ve&#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":16262,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739,12],"tags":[3568,3567,3569],"class_list":["post-16246","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","category-c-sharp-c","tag-arraysegment","tag-microsoft-extensions-primitives","tag-stringsegment"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/16246","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=16246"}],"version-history":[{"count":39,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/16246\/revisions"}],"predecessor-version":[{"id":16391,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/16246\/revisions\/16391"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/16262"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=16246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=16246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=16246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}