2016-09-18 58 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")); 
相關問題