.NET 9.0'da yeni [23]: Operatör linq agregatby () ve dizin ()

Son gönderide sunulana ek olarak CountBy() Ayrıca var AggregateBy() VE Index() .NET 9.0'daki yeni operatörler LINQ (entegre dil sorgusu) gibi.

Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta 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.

AggregateBy() Bir grubu toplama amacıyla basitleştirdi. Summerica. Aşağıdaki kod yeni operatörü kullanır:


/// <summary>
 /// AggregateBy() vereinfacht eine Gruppierung mit dem Ziel der Aufsummierung.
 /// Beispiel: Summierung der Punkte pro Team
 /// </summary>
 public void LINQ_AggregateBy()
 {
  CUI.Demo(nameof(LINQ_AggregateBy) + ": Summierung der Punkte pro Team");
  List<Person> personSet = GetData();
 
  // --------------------------- ALT
  CUI.H2("Alt mit GroupBy() + Select()");
 
  // Punkte aggregieren ALT
  var teamPointsOld = personSet
      .GroupBy(p => p.Team)
      .Select(group => new { Team = group.Key, PunkteSumme = group.Sum(p => p.Punkte) });
 
  AnsiConsole.Write(new BarChart()
.Width(60)
.AddItems(teamPointsOld, (item) => new BarChartItem(
   item.Team, item.PunkteSumme, Color.Cyan2)));
 
  // --------------------------- NEU
  CUI.H2("nNeu mit AggregateBy()");
 
  // Punkte aggregieren NEU
  IEnumerable<KeyValuePair<string, int>> teamPointsNew = personSet.AggregateBy(
      p => p.Team,
      seed: 0,
      (PunkteSumme, p) => PunkteSumme + p.Punkte);
 
  AnsiConsole.Write(new BarChart()
    .Width(60)
    .AddItems(teamPointsNew, (item) => new BarChartItem(
      item.Key, item.Value, Color.Cyan1)));
 }

Sonuçlar Linq

Sonuçlar Linq

Kod, ekiplerin noktalarını özetler.

(Resim: Ekran görüntüsü (Holger Schwichtenberg))

Index() Bir için teslimat IEnumerable<T> Aşağıdaki kodda bir dize olan devam eden dizin (bütün, 0 andan) ve dönüş değeri olan bir tupel:


/// <summary>
 /// Index() liefert für ein IEnumerable<T> ein Tupel mit dem Wert und dem laufenden Index (0 bis n) zurück. Beispiel: Wörter in einer Zeichenkette werden durchnummeriert.
 /// </summary>
 public void LINQ_Index()
 {
  CUI.Demo(nameof(LINQ_Index) + ": Wörter in einer Zeichenkette werden durchnummeriert");
 
  string sourceText = """
    Das ist ein Testbeispiel, das einige Mal das Wort das enthält.
    """;
  IEnumerable<string> words = sourceText.Split(new char[] { ' ', '.', ',', 'r', 'n' }, StringSplitOptions.RemoveEmptyEntries);
 
  // --------------------------- ALT mit Select()
  CUI.H2("nAlt mit Select()");
  IEnumerable<(int index, string wort)> wordIndexOld = words.Select((wort, index) => (index, wort));
  foreach ((int index, string wort) in wordIndexOld)
  {
   Console.WriteLine($"{index + 1} Wort: {wort}");
  }
 
  // --------------------------- NEU mit Index() liefert Tupel mit Index und Wert
  CUI.H2("nNeu mit Index()");
  IEnumerable<(int Index, string Item)> wordIndexNew = words.Index();
  foreach ((int index, string wort) in wordIndexNew)
  {
   Console.WriteLine($"{index + 1} Wort: {wort}");
  }
 }

Sonuçlar Linq

Sonuçlar Linq

Kod, bir dize içindeki kelimeleri numaralandırdı.

(Resim: Ekran görüntüsü (Holger Schwichtenberg))


(RME)


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

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