c# - c# - 使用 LinQ 在列表中查找重复项,如果是,则更新对象属性
问题描述
我有一个对象类型为 FLightInfo 的 Allflights列表。
如果列表中的对象具有相同的航班号和起飞时间。我想合并这些条目并添加他们的用户数
示例:这是我的清单:
- 航班号 123 起飞 12:00 用户 5
- FlightNumber 256 起飞 3:00 用户 6
- 航班号 123 起飞 12:00 用户 8
- FlightNumber 651 起飞 5:00 用户 3
我希望输出如下:
FlightNumber 123 Takeoff 12:00 Users 13
FlightNumber 256 Takeoff 3:00 Users 6
FlightNumber 651 Takeoff 5:00 Users 3
我的源代码:
struct FlightInfo
{
public string FlightNumber { get; set; }
public string Takeoff_time { get; set; }
public string Landing_time { get; set; }
public int UserCount { get; set; }
}
static List<FlightInfo> allFlights = new List<FlightInfo>();
//I read several files using multi-threading and create a FlightInfo object
//and add it to the allFlights list
allFlights.Add(buildFlight(FlightNumber, Origination, Destination, Takeoff_time, Landing_time, UserCount);
//This is what I need to do
//if FlightNumber && testTakeOff object attributes are the same
// I want to consolidate those entries and add the UserCount from those entries
解决方案
使用你的对象定义你可以做这样的事情
var consildatedFlights = allFlights.GroupBy(x => new {x.FlightNumber, x.Takeoff_time}, x => x,
(key, vals) => ConsolidateFlightInfo(vals));
foreach(var flight in consildatedFlights)
Console.WriteLine($"FlightNumber: {flight.FlightNumber}, Takeoff Time: {flight.Takeoff_time}, User Count: {flight.UserCount}");
public static FlightInfo ConsolidateFlightInfo(IEnumerable<FlightInfo> flights)
{
var list = flights.ToList();
var ret = list[0];
ret.UserCount = list.Sum(x => x.UserCount);
return ret;
}
第一个参数.GroupBy
指定描述要分组的属性的匿名类型。第二项指定您想要的结果列表中的内容(每组一个)。在这种情况下,我们需要整个航班信息对象。第三个参数指定您希望如何转换每个分组。在这种情况下,我们将每组分组航班传递给一个方法,该方法求和UserCount
并返回具有该总和值的单个航班FlightInfo
。
推荐阅读
- java - 我正在使用 Kotlin 修改 Java,但我正在努力修复错误的部分(编辑)
- java - 使用 itext 将不同的文件格式合并为单个 pdf 会导致 pdf 损坏
- laravel - 资源视图供应商目录中的 GCloud Laravel 通知自定义模板
- elasticsearch - Elastic Search 测量堆使用情况
- apache-nifi - 如何查找GenerateTableFetch创建的所有文件都已处理
- python - lxml (etree) - 根标签的漂亮打印属性
- macos - 无法在 Mac Os Mojave 上停止或重新启动 Apache
- python - Exchangelib item.sender 返回字节
- python - 如何访问项目类 Scrapy
- .net - 使用实现接口的通用类型参数对不同类型的实例进行拆箱