.NET 9.0'da yeni [21]: Depolama tahsisi olmadan şaşırtıcı zincirleri arayın

.NET 9.0'da türleri sunar HashSet<T> VE Dictionary<T, T> Biriyle yeni bir unsur yolu ReadOnlySpan<T> aramak için. Bu, dizeler ararken birçok bellek tahsisinden kaçınır.

Holger Schwichtenberg, 53 ünlü uzmanla, danışmanlık ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ölçekli ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.

Örnek: Yarım -colon ile ayrılmış bir ad miktarında, isim için ad aranmalıdır.

Verilir


HashSet<string> suchwoerter = 
  new HashSet<string>() { "Müller", "Meier", "Schulze" };
string[] datenbasis = """
 Müller;Schwichtenberg;Stropek;Krämer
 Huber;Meier;Loje
 Schulze;Wenz;Schmaranz
 ...
 """.Split("n");

Daha önceki önceki uygulama .NET 9.0 aşağıdaki gibi görünebilir:


foreach (string line in datenbasis) 
  {
   foreach (string n in line.Split(';')) // String-Allokation
   {
    if (suchwoerter.Contains(n)) fundstellen1++;
   }
  }
  Console.WriteLine(fundstellen1);

.NET 9.0'dan beri yöntemi araştırma kelimeleri için kullanabilirsiniz GetAlternateLookup() Sözde bir “araştırma” yarattı ve sonra biriyle ReadOnlySpan<char> İle ilgili HashSet<T> aramak:


[code]HashSet<T>[/code] suchen:
HashSet<string>.AlternateLookup<ReadOnlySpan<char>> suchwoerter2 = 
  suchwoerter.GetAlternateLookup<ReadOnlySpan<char>>();
 
int fundstellen2 = 0;
foreach (string line in datenbasis)
{
 ReadOnlySpan<char> lineSpan = line.AsSpan(); // ohne Allokation
 foreach (Range range in lineSpan.Split(';'))
 {
  ReadOnlySpan<char> nameSpan = lineSpan[range]; // ohne Allokation
  if (suchwoerter2.Contains(nameSpan)) fundstellen2++; 
 }
}
Console.WriteLine(fundstellen2);


(RME)


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir