C# 查找列表中最常出现项的方法

C# 查找列表中最常出现项的方法,c#,list,find,C#,List,Find,好的,我有一个关于停车场的项目。长话短说,我需要一种方法来查找数据列表中最常出现的模型。使用VST 2012有什么好方法可以实现这一点吗 private static int FilterbyModel(string Model, List<Car> cars) { int modelCount = 0; List<string> Modelis = new List<string>(); foreach

好的,我有一个关于停车场的项目。长话短说,我需要一种方法来查找数据列表中最常出现的模型。使用VST 2012有什么好方法可以实现这一点吗

private static int FilterbyModel(string Model, List<Car> cars)


  {
        int modelCount = 0;
        List<string> Modelis = new List<string>();
        foreach (Car s in cars)
        {
            if (s.Modelis == Model)
            {
                if (!Model.Contains(s.Modelis)) 
                {
                    Modelis.Add(s.Modelis);
                    modelCount++;
                }
            }
            return modelCount;

上述方法可行,但我需要提供一个要查找的特定模型,而不仅仅是找到最常见的模型。

计算出现次数的最简单方法是按模型分组,然后计算每个组的元素。这里我举一个LINQ的例子:

var carsByModel = cars.GroupBy(x => x.Model)
    .Select(x => new { Model = x.Key, Count = c.Count() });
现在,如果您想订购它们并选择最常见的:

var mostCommonCar = carsByModel.OrderByDescending(x => x.Count).First();
例如,如果需要打印两种最常见的模型:

foreach (var model in carsByModel.OrderByDescending(x => x.Count).Take(2))
    Console.WriteLine($"{model.Model}: {model.Count}");
或者不太常见的两个:

foreach (var model in carsByModel.OrderBy(x => x.Count).Take(2))
    Console.WriteLine($"{model.Model}: {model.Count}");
如果您对某个特定模型感兴趣,可以这样做,注意在本例中我省略了StringComparer,但我始终建议在生产代码中使用它:

carsByModel.First(x => x.Model.Equals("modelYouWant"));
但是,请注意,如果您只需要计算特定模型的出现次数,则这会更快、更简单:

int occurencesOfModelIWant = cars.Count(x => x.Model.Equals("modelYouWant"));