2016-09-18 29 views
2

好的,所以我有一个关于停车场的项目。长话短说我需要一种方法来查找数据列表中最常出现的模型。任何好的方法可以解决这个(使用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; 

以上方法将工作,但我需要提供一个特定的模式去寻找,而不是随便找最常见的一种。

回答

4

计算出现次数的最简单方法是按模型分组,然后计算每个组的元素。在这里,我给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")); 
相关问题