簡體   English   中英

使用LINQ選擇並按字符串分組?

[英]Select and group by string occurrences using LINQ?

我有一些數據要統計和分組。 看起來像這樣:

貓貓狗狗狗

我的目標是獲取具有動物名稱及其在數據集中出現的次數的對象列表

對象1

名稱:貓

編號外觀:2

對象2

名稱:狗

編號外觀:3

我正在嘗試使用LINQ查詢來執行此操作,這是我所擁有的,但是計數是錯誤的。 我認為它是在計算長度而不是出現的次數。 我將如何修改呢?

animalData.Select(x => x.AnimalType).Distinct().ToList().ForEach(a => 

    AnimalObject animal = new AnimalObject();

    animal.Name = a.Name;

    animal.Number = a.Distinct().Count();

    animalList.Add(animal);

});

這是完成任務所需的全部:

var result = animalData.GroupBy(x => x.AnimalType).Select(g => new AnimalObject 
             {
                 Name = g.Key,
                 Number = g.Count()
             }).ToList();

foreach (var e in result)
    Console.WriteLine($"Name: {e.Name} \n NumberAppearances: {e.Number}");

注意 -

  1. 由於當前正在編寫LINQ查詢,因此您無需調用distinctToList,因為前者將導致錯誤的結果,而后者則是不必要的。
  2. 遵循良好的命名約定,類型名稱后不需要Object后綴,因此僅Animal就足夠了。

您可以在Dictionary的幫助下使用此對象而無需創建新對象:

var animalCounts = animalList.GroupBy(a => a.AnimalType).ToDictionary(
                                 grp => grp.Key, grp => grp.ToList().Count());
foreach(var animalCount in animalCounts) {
   Console.WriteLine($"Name: {animalCount.Key}{Environment.NewLine}NumberOfApperances: {animalCount.Value}");
}

按AnimalType將數據分組,然后將其轉換為AnimalObject。

var result = animalData.GroupBy(x => x.AnimalType)
                            .Select(g => new AnimalObject { Name = g.Key, Number = g.Count() })
                            .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM