【问题标题】:Finding most common property in class [duplicate]在类中找到最常见的属性[重复]
【发布时间】:2019-09-07 20:07:43
【问题描述】:

我有一个带有构造函数的类和一些属性。我需要找到最常见的重复属性并对其进行计数。

class Car
{
    public string Make { get; set; }

    public Car(string make)
    {
        this.Make = make;
    }
}

我创建了一个名为“汽车”的列表,其中包含 7 个成员,并设置了这些汽车品牌:奥迪、沃尔沃、沃尔沃、宝马、奥迪、奥迪、奥迪(最常见的是奥迪)。

如何找到并输出最常见的“Make”及其数量?

【问题讨论】:

  • 按 Make 按您的列表分组,然后选择包含最多项目的组
  • 查看标记的重复项。您的情况完全相同,只是您正在寻找 Make 值而不是 int 值。

标签: c# class properties


【解决方案1】:

你可以用这个:

using System.Linq;
using System.Collections.Generic;

void TestCar()
{
  var list = new List<Car>();

  list.Add(new Car("Audi"));
  list.Add(new Car("Volvo"));
  list.Add(new Car("Audi"));
  list.Add(new Car("BMW"));
  list.Add(new Car("Audi"));

  var query = ( from car in list
                group car by car.Make into cars
                select new { Key = cars.Key, Count = cars.Count() } );

  var result = query.OrderByDescending(item => item.Count).FirstOrDefault();

  if (result != null) 
    MessageBox.Show(result.Key + " count = " + result.Count);
}

【讨论】:

  • 我需要找到最常见的品牌(在大多数情况下它不会是“奥迪”,我以它为例)。
  • 确实,答案已经更新了。
  • 它可以工作,但我不明白它是怎么做到的
  • 当我们计算每次出现时,linq 语句会计算按此属性分组的每个“Make”。接下来,我们按计数列降序排列。这里的结果是“Audi|3,Volvo|1,BMW|1”。所以我们取第一行,其中 Key = "Audi" 和 Count = 3。顺序可以放在 linq 语句中。 docs.microsoft.com/dotnet/csharp/linq/group-query-results
  • 您应该考虑到可能有几个大多数 Make 具有相同的 Count。您可以对结果取 FirstOrDefault 并将 Count 值作为 countMax。接下来,您可以在相同的结果上使用 TakeWhile(key => key == countMax) 并执行 foreach 以显示大多数制造汽车。
猜你喜欢
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多