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

Saberie

Active member
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.






Dotnet Doctor-Holger Schwichtenberg




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



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



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


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




(RME)




Ne yazık ki, bu bağlantı artık geçerli değil.

Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.


Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!
 
Üst