C# 林克集团
我是C#的新手,正在尝试回答一些关键问题。我被困在1号标记为困难 Q:平均数最高的前10个始发机场是什么 出发延迟,包括这些延迟的值?(提示:使用分组依据) 我有一个名为“Flights”的列表,里面有超过20000个类的对象“FlightInfo” FlightInfo类的属性包括: 字符串载体、字符串起点、字符串终点、整数出发延迟、整数到达延迟、整数取消、整数距离 我知道我应该按FlightInfo.Origin对FlightInfo进行分组,然后按FlightInfo.DepartureDelay对每个分组进行平均,然后显示平均延迟最高的10个分组,但除了分组之外,我完全被困在如何进一步进行的问题上 提前感谢您的帮助C# 林克集团,c#,linq,average,C#,Linq,Average,我是C#的新手,正在尝试回答一些关键问题。我被困在1号标记为困难 Q:平均数最高的前10个始发机场是什么 出发延迟,包括这些延迟的值?(提示:使用分组依据) 我有一个名为“Flights”的列表,里面有超过20000个类的对象“FlightInfo” FlightInfo类的属性包括: 字符串载体、字符串起点、字符串终点、整数出发延迟、整数到达延迟、整数取消、整数距离 我知道我应该按FlightInfo.Origin对FlightInfo进行分组,然后按FlightInfo.Departure
以下是我能够回答的先前问题之一的示例: Q:航班的加权到达延迟是其到达延迟除以距离。马萨诸塞州波士顿外加权到达延迟最大的航班是哪一个 A:
var weighted = (from FlightInfo in Flights
where FlightInfo.Origin == "Boston MA"
orderby (FlightInfo.ArrivalDelay / FlightInfo.Distance) descending
select FlightInfo).Take(1);
你可以这样做
var top10 = Flights.GroupBy(g=>g.Origin) // groupby origin
.OrderByDescending(x=> x.Sum(f=> f.ArrivalDelay / f.Distance)) // Get the weighted delay for each fight and use for ordering.
.Select(x=>x.Key) //Airport or Origin (Modify with what you want)
.Take(10)
.ToList() ;
你可以这样做
var top10 = Flights.GroupBy(g=>g.Origin) // groupby origin
.OrderByDescending(x=> x.Sum(f=> f.ArrivalDelay / f.Distance)) // Get the weighted delay for each fight and use for ordering.
.Select(x=>x.Key) //Airport or Origin (Modify with what you want)
.Take(10)
.ToList() ;
最后一个。选择
参数取决于所需内容
var topTen = flights.
GroupBy(g => g.Origin).
Select(g => new { Origin = g.Key, AvgDelay = g.ToList().Average(d => d.DepartureDelay) }).
OrderByDescending(o => o.AvgDelay).
Take(10);
最后一个
。选择
参数取决于所需内容。回答问题的旁注:Take
返回IEnumerable
如果需要T
实例,请使用First
或FirstOrDefault
是,我发现当我首先使用时
可以在不使用foreach
循环的情况下访问属性。谢谢,我以前不明白为什么我不能Console.WriteLine(weighted.Origin)
。回答问题的旁注:Take
返回IEnumerable
如果你想要t
实例,请使用First
或FirstOrDefault
是,我发现当我首先使用时
可以在不使用foreach
循环的情况下访问属性。谢谢,我以前不明白为什么我不能Console.WriteLine(weighted.Origin)
。谢谢,这是我问题的完整解决方案。既然我是一个新手,我仍然不能掌握语法,看来我已经跃跃欲试了。我有很多东西要学…你们先用钥匙分组。Linq制作了一个字典,其中key是您分组所依据的键,value是这些对象的列表(与SQL稍有不同)。之后,我们为这些组中的每一个进行选择,在其中创建一个新的匿名对象,该对象具有属性Origin和AvgDelay。Avg delay是该特定键列表中所有对象的平均值。之后,AvgDelay就可以轻松订购了,先取10个。非常感谢。我理解逻辑,但无论我如何尝试,我都无法添加另一个属性来选择。比如说,我也想向Carrier展示一下<代码>选择(g=>new{Origin=g.Key,AvgDelay=g.ToList().Average(d=>d.DepartureDelay),Company=g.ToList()。既然我是一个新手,我仍然不能掌握语法,看来我已经跃跃欲试了。我有很多东西要学…你们先用钥匙分组。Linq制作了一个字典,其中key是您分组所依据的键,value是这些对象的列表(与SQL稍有不同)。之后,我们为这些组中的每一个进行选择,在其中创建一个新的匿名对象,该对象具有属性Origin和AvgDelay。Avg delay是该特定键列表中所有对象的平均值。之后,AvgDelay就可以轻松订购了,先取10个。非常感谢。我理解逻辑,但无论我如何尝试,我都无法添加另一个属性来选择。比如说,我也想向Carrier展示一下<代码>选择(g=>new{Origin=g.Key,AvgDelay=g.ToList().Average(d=>d.DepartureDelay),Company=g.ToList()。它给出了正确但不完整的答案。由于我是新手,我无法自己添加其他属性(出发延迟)。谢谢您的回答。它给出了正确但不完整的答案。由于我是新手,我无法自己添加其他属性(出发延迟)。
var topTen = flights.
GroupBy(g => g.Origin).
Select(g => new { Origin = g.Key, AvgDelay = g.ToList().Average(d => d.DepartureDelay) }).
OrderByDescending(o => o.AvgDelay).
Take(10);