Dizeyi Span olarak kullanan API'ler (C# 6 öykünmesi)
Dizeyi span olarak kullanmayı öykünün: char[] türüne dönüştürün, ArraySegment ile dilimleyin, dizinlerle arayın/kırpın/ayrıştırın ve alt dizeleri yalnızca uçlarda oluşturun.
Dizeyi Span olarak kullanan API'ler (C# 6 öykünmesi), CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.
Plan: dizeleri dilimler olarak kullanma
Amaç: C# 6'da dizeyi aralık gibi kullanma fikirlerinden yararlanmak.
- Bir kez karakter dizisine dönüştürünüz
- Görünüm olarak ArraySegment<char> kullanınız
- İndekslere göre kırpınız, arayınız ve ayrıştırınız
- Alt dizeyi yalnızca sınırda oluşturunuz
Dize üzerinde pencere
Bir kez karakter dizisine dönüştürerek dize üzerinde bir pencere oluşturunuz, ardından ofset/sayı ile çalışınız.
using System;
public static class StrWin
{
public static ArraySegment<char> Window(string s, int start, int count)
{
if (s == null) throw new ArgumentNullException("s");
if (start < 0 || count < 0 || start + count > s.Length) throw new ArgumentOutOfRangeException();
// Convert once: keep char[] for further operations
char[] buf = s.ToCharArray();
return new ArraySegment<char>(buf, start, count);
}
}
public class Program
{
public static void Main(string[] args)
{
string text = " [User: Ada] ";
ArraySegment<char> mid = StrWin.Window(text, 2, 10); // "[User: Ada]"
Console.WriteLine("Offset=" + mid.Offset + " Count=" + mid.Count);
}
}
İndekslere göre kırpma
Span tabanlı Trim mantığını taklit etmek için indeksler üzerinden işlem yapınız; yeni bir dize oluşturulmaz.
using System;
public static class SegText
{
public static ArraySegment<char> Trim(ArraySegment<char> seg)
{
int i = seg.Offset;
int j = seg.Offset + seg.Count - 1;
while (i <= j && Char.IsWhiteSpace(seg.Array[i])) i++;
while (j >= i && Char.IsWhiteSpace(seg.Array[j])) j--;
int n = (j >= i) ? (j - i + 1) : 0;
return new ArraySegment<char>(seg.Array, i, n);
}
}
public class Program
{
public static void Main(string[] args)
{
char[] buf = " Hello, Ada ".ToCharArray();
ArraySegment<char> all = new ArraySegment<char>(buf, 0, buf.Length);
ArraySegment<char> t = SegText.Trim(all);
// Print without creating a new string
for (int k = 0; k < t.Count; k++) Console.Write(t.Array[t.Offset + k]);
Console.WriteLine();
}
}
Pencere içinde arama
Pencere içindeki göreli konumları döndüren küçük IndexOf benzeri yardımcılar oluşturunuz.
using System;
public static class SegSearch
{
// Find the first index of a char inside the segment; returns -1 if not found.
public static int IndexOf(ArraySegment<char> seg, char needle)
{
int end = seg.Offset + seg.Count;
for (int i = seg.Offset; i < end; i++)
if (seg.Array[i] == needle) return i - seg.Offset; // relative index
return -1;
}
}
public class Program
{
public static void Main(string[] args)
{
char[] buf = "[User: Ada]".ToCharArray();
ArraySegment<char> w = new ArraySegment<char>(buf, 0, buf.Length);
int pos = SegSearch.IndexOf(w, '/'); // 5
Console.WriteLine("pos=" + pos);
}
}
Pencereden ayrıştırma
Alt dizeler oluşturmadan sayıları doğrudan pencereden ayrıştırınız; başarı veya başarısızlık döndürünüz.
using System;
public static class SegParse
{
// Try to parse a non-negative integer from the segment; returns false on failure.
public static bool TryParseInt(ArraySegment<char> seg, out int value)
{
value = 0;
if (seg.Count == 0) return false;
int end = seg.Offset + seg.Count;
for (int i = seg.Offset; i < end; i++)
{
char c = seg.Array[i];
if (c < '0' || c > '9') return false;
int digit = (int)(c - '0');
// basic overflow-safe step for small inputs
if (value > (Int32.MaxValue - digit) / 10) return false;
value = value * 10 + digit;
}
return true;
}
}
public class Program
{
public static void Main(string[] args)
{
char[] buf = "id=1203; name=Ada".ToCharArray();
ArraySegment<char> idSeg = new ArraySegment<char>(buf, 3, 4); // "1203"
int n;
bool ok = SegParse.TryParseInt(idSeg, out n);
Console.WriteLine(ok ? ("n=" + n) : "parse failed");
}
}
Sınırda somutlaştırma
Yeni bir dizeyi yalnızca son adımda (kullanıcı arayüzü/günlükleme) oluşturunuz; iç çalışmayı bellek ayırmadan sürdürünüz.
using System;
public static class SegToString
{
public static string ToStringSegment(ArraySegment<char> seg)
{
// Materialize a new string only when needed (e.g., logging/output)
return new string(seg.Array, seg.Offset, seg.Count);
}
}
public class Program
{
public static void Main(string[] args)
{
char[] buf = " key=value ".ToCharArray();
ArraySegment<char> all = new ArraySegment<char>(buf, 0, buf.Length);
// Trim first
int i = all.Offset, j = all.Offset + all.Count - 1;
while (i <= j && Char.IsWhiteSpace(buf[i])) i++;
while (j >= i && Char.IsWhiteSpace(buf[j])) j--;
ArraySegment<char> trimmed = new ArraySegment<char>(buf, i, (j >= i) ? (j - i + 1) : 0);
// Create string only at the end
Console.WriteLine(SegToString.ToStringSegment(trimmed)); // "key=value"
}
}
Dizeyi aralık gibi kullanma yaklaşımı
Özet
Özet: Dizeleri aralıklar gibi ele alınız; karakter dizisi pencereleri üzerinde çalışınız, kırpma/arama/ayrıştırma için ofset/sayı kullanınız ve yalnızca gerektiğinde Materialize ediniz.
Sıkça Sorulan Sorular
“Dizeyi Span olarak kullanan API'ler (C# 6 öykünmesi)” dersi ücretsiz mi?
Evet — “Dizeyi Span olarak kullanan API'ler (C# 6 öykünmesi)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.
“Dizeyi Span olarak kullanan API'ler (C# 6 öykünmesi)” dersinde ne öğreneceğim?
Dizeyi span olarak kullanmayı öykünün: char[] türüne dönüştürün, ArraySegment ile dilimleyin, dizinlerle arayın/kırpın/ayrıştırın ve alt dizeleri yalnızca uçlarda oluşturun. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 3. dersidir.
“Dizeyi Span olarak kullanan API'ler (C# 6 öykünmesi)” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Span/ReadOnlySpan temelleri (C# 6 öykünmesi)
- Memory/ReadOnlyMemory öykünmesi: kopyasız pencereler
- Dizeyi Span olarak kullanan API'ler (C# 6 öykünmesi)