این مقاله را به اشتراک بگذارید
[ad_1]
در .NET 9.0 ، مایکروسافت دارای اپراتور جدید در کتابخانه کلاس پایه است CountBy()
برای پرس و جو یکپارچه زبان (LINQ) اضافه شده است. اگر قرار باشد با توجه به فرکانس گروه بندی شود ، دیگر نیازی به انجام اپراتور نیست GroupBy()
برای استفاده
دکتر هولگر شویشنبرگ مدیر فنی شبکه متخصصان www.it-vision.de است که با 53 متخصص مشهور از طریق مشاوره و آموزش و همچنین در توسعه نرم افزار از شرکت های متوسط و بزرگ و بزرگ پشتیبانی می کند. هولگر شویشنبرگ از طریق حضور وی در کنفرانس های متخصص ملی و بین المللی و همچنین بیش از 90 کتاب تخصصی و بیش از 1500 مقاله تخصصی ، یکی از بهترین متخصصان شناخته شده برای .NET و تکنیک های وب در آلمان است.
مثال کد زیر رایج ترین نام های اول را تعیین می کند CountBy()
:
private static List GetData()
{
#region ---------------- Demodaten erstellen
int count = 10000;
CUI.H3($"Generiere {count} Demodaten...");
Randomizer.Seed = new Random(42); // Fester Seed für gleichbleibende Testdaten!
var personFaker = new AutoFaker("de") // Fake-Daten mit https://github.com/nickdodd79/AutoBogus
.RuleFor(fake => fake.ID, fake => fake.Random.Int(0))
.RuleFor(fake => fake.Givenname, fake => fake.Name.FirstName())
.RuleFor(fake => fake.Surname, fake => fake.Name.LastName())
.RuleFor(fake => fake.Birthday, fake => fake.Date.Past(100).Date)
.RuleFor(fake => fake.Team, fake => fake.Random.ArrayElement(new string[] { "MSV", "RWE", "BVB" }))
.RuleFor(fake => fake.Punkte, fake => fake.Random.Number(0, 10));
List personSet = new();
for (int i = 0; i
/// Ermitteln der 10 häufigsten Vornamen in einer Liste von Personen
///
public void LINQ_CountBy()
{
CUI.Demo(nameof(LINQ_CountBy) + ": Ermitteln der 10 häufigsten Vornamen in einer Liste von Personen");
List personSet = GetData();
// --------------------------- ALT
CUI.H2("10 häufigste Vornamen im Datenbestand (alt mit GroupBy() + Select())");
// bisherige Implementierung mit GroupBy() + Select()
var nameGroupsOld = personSet
.GroupBy(info => info.Givenname) // Gruppieren nach Häufigkeit des GivenName
.Select(group => new
{
Key = group.Key,
Value = group.Count() // Zählen
});
var groups1top10 = nameGroupsOld.OrderByDescending(x => x.Value).Take(10);
// Ausgabe mit SpectreConsole
AnsiConsole.Write(new BarChart()
.Width(60)
.AddItems(groups1top10, (item) => new BarChartItem(
item.Key, item.Value, Color.Cyan1)));
// --------------------------- NEU
CUI.H2("\n10 häufigste Vornamen im Datenbestand (neu mit CountBy())");
Dictionary nameGroupsNew = personSet
.CountBy(x => x.Givenname); // Gruppieren nach Häufigkeit des GivenName
Console.WriteLine("10 häufigste Vornamen im Datenbestand:");
var groups2top10 = nameGroupsNew.OrderByDescending(x => x.Value).Take(10);
// Ausgabe mit SpectreConsole
AnsiConsole.Write(new BarChart()
.Width(60)
.AddItems(groups2top10, (item) => new BarChartItem(
item.Key, item.Value, Color.Cyan2)));
}
نتیجه CountBy()
است ، Dictionary
، در حالی که اجرای قبلی با GroupBy()
یک نوع ناشناس را ارائه می دهد.
نسخه کد مثال از Spectreconsole کتابخانه اضافی برای نسخه نوار استفاده می کند.
(BILD: تصویر (هولگر شویشنبرگ))
(RME)
[ad_2]
لینک منبع