c# - 使用字典> 在 C# 的列表中查找最常见的出现
问题描述
假设我的 C# 代码定义如下,我想向控制台返回一个输出,显示列表或汽车中最常见的燃料类型。
// set delegates defining rules as a function that takes list of cars and returns an int
Func<List<Car>, int> CountElectric = (cars) => cars
.GroupBy(c => c.IsElectric == true).Count(); // count electric cars
Func<List<Car>, int> CountGassoline = (cars) => cars
.GroupBy(c => c.FuelType == FuelTypes.Gassoline).Count(); // count cars using gassoline
Func<List<Car>, int> CountDiesel = (cars) => cars
.GroupBy(c => c.FuelType == FuelTypes.Diesel).Count(); // Count cars using diesel
// Add rules to dictionary of (Key=CarType, Value=Func<List<Car>, bool>
CarsRules = new Dictionary<CarType, Func<List<Car>, int>>()
{
{FueldType.Electric, CountElectric},
{FueldType.Diesel,CountDiesel},
{FueldType.Gassoline, CountGassoline}
};
// Create List of Cars and add some cars
List<Car> cars = new List<Car>();
cars.Add(new Car()
{Id = Guid, Name = "Tesla", IsElectric = true, FuelType = FuelTypes.Electric};
cars.Add(new Car()
{Id = Guid, Name = "VW", IsElectric = false, FuelType = FuelTypes.Gassoline};
cars.Add(new Car()
{Id = Guid, Name = "Toyota", IsElectric = false, FuelType = FuelTypes.Gassoline};
cars.Add(new Car()
{Id = Guid, Name = "Volvo", IsElectric = false, FuelType = FuelTypes.Diesel};
在上面的汽车列表中,汽油是最常见的。我怎么知道呢?IE 我想在控制台上显示只是“汽油”
如果我在上面的列表中打成平手,例如 2 辆使用汽油的汽车和 2 辆使用柴油的汽车,我将如何找到并退回两者?IE 我想在控制台上显示“汽油”和“柴油”
我很难理解这种结构,我想像下面这样用老式的方式来做,但我很清楚应该有更优雅的方式来使用 Func 代表
public List<string> GetMostUsedFuelTypes(List<Car> cars)
{
List<string> winners = new List<string>();
int CountElectric = 0;
int CountGassoline = 0;
int CountDiesel = 0;
foreach(var car in cars)
{
// Count and return fuel type that occurs most, if a tye, return the highest counts
}
return winners;
}
解决方案
var mostCommonFuelType =
cars
.GroupBy(car => car.FuelType)
.OrderBy(carsByFuelType => carsByFuelType.Count())
.Select(carsByFuelType => carsByFuelType.Key
.FirstOrDefault();
如果您需要自定义规则,只需让规则选择要在其分组中使用的键。除非它们不是互斥的,在这种情况下,您还需要使用 SelectMany 并返回键和值对。
推荐阅读
- swift - 以编程方式在具有分段控制的 UIView 之间滑动
- github-actions - 在 Github Actions 中映射环境变量
- javascript - 将 ID 保存在变量中并为其添加样式
- docker - Docker中的Kakfa分区
- amazon-web-services - 在 postman 中为 AWS Cloudwatch 构建 GetMetricData API
- python - Python ctypes:没有按预期加载dll
- couchbase - Couchbase 中的条件更新插入
- sql - 订购后添加新的滞后列?
- python - 如果输入 5 个数字,如何显示 ABCDE 1 2 3 4 5
- javascript - 主机侦听器单击事件在 Firefox 的 bing-maps v8 中不起作用