C#-获取列表中的3个最低值,由列表中对象的公共属性度量
对不起,如果我的术语不是很好,我不是一个专业的程序员 我有一个列表C#-获取列表中的3个最低值,由列表中对象的公共属性度量,c#,list,C#,List,对不起,如果我的术语不是很好,我不是一个专业的程序员 我有一个列表,其中“Something”是一个结构。此结构包含对象,每个对象在类中都有自己的公共属性/字段。我想按顺序对列表排序,但要按这些嵌套属性/字段中的值排序。然后我想返回这些值的列表,而不是结构 我知道这很让人困惑,但我一直很难做到这一点。目前,我只得到一个返回的计数为20的列表(这是我正在使用的完整数据集),但我只希望3个值具有最小的值 以下是我正在使用的一些代码,以供上下文和进一步解释: // Returns 3
// Returns 3 nearest stations to the location specified
public static List<TrainStation> nearbyStations(GeoCoordinate location)
{
List<StationWalk> stations = new List<StationWalk>();
foreach (TrainStation s in All)
{
stations.Add(new StationWalk(s, new Walk(location, s.location)));
}
// return 3 TrainStation objects that have the lowest StationWalk.Walk.duration values corresponding with them in the StationWalk struct
stations.OrderBy(walks => walks.walk.duration).Take(3);
List<TrainStation> returnList = new List<TrainStation>();
foreach (StationWalk s in stations)
{
returnList.Add(s.station);
}
return returnList;
}
private struct StationWalk
{
public StationWalk(TrainStation station, Walk walk)
{
this.station = station;
this.walk = walk;
}
public TrainStation station;
public Walk walk;
}
//返回指定位置最近的3个桩号
邻近站点的公共静态列表(地理坐标位置)
{
列表站=新列表();
foreach(所有火车站)
{
添加(新车站步行(s,新步行(位置,s位置));
}
//返回在StationWalk结构中具有与之对应的最低StationWalk.Walk.duration值的3个TrainStation对象
stations.OrderBy(walks=>walks.walk.duration).Take(3);
List returnList=新列表();
foreach(车站内的车站步行)
{
返回列表。添加(s站);
}
退货清单;
}
私人结构站径
{
公共车站步行道(火车站、步行道)
{
这个站=站;
this.walk=walk;
}
公共火车站;
公众步行;
}
“Walk”是一个包含“duration”字段的类。这表示步行所需的时间。更具体地说,我的总体目标是在列表中的20次步行中找出哪3次是最快的。但是“行走”是StationWalk结构的属性,“持续时间”是行走的属性
我该怎么做呢?真的很抱歉,如果没有很好地解释这一点,尽管是我自己写的,但独自一人试图向其他人解释,这让我感到困惑。感谢任何帮助。OrderBy和
Take
都返回一个新集合,它们不会修改现有集合,因此,您需要存储对以下方法返回的新集合的引用:
stations = stations.OrderBy(walks => walks.walk.duration).Take(3).ToList();
如果希望保留对原始列表的引用,以便在代码中进一步使用,则只需将结果存储在局部变量中:
var lowestThreeStations = stations.OrderBy(walks => walks.walk.duration).Take(3).ToList();
OrderBy
和Take
都返回一个新集合,它们不修改现有集合,因此您需要存储对以下方法返回的新集合的引用:
stations = stations.OrderBy(walks => walks.walk.duration).Take(3).ToList();
如果希望保留对原始列表的引用,以便在代码中进一步使用,则只需将结果存储在局部变量中:
var lowestThreeStations = stations.OrderBy(walks => walks.walk.duration).Take(3).ToList();
那么你所拥有的又有什么问题呢?那么你所拥有的又有什么问题呢?