对不起,如果我的术语不是很好,我不是专业的程序员。
我有一个 List<Something>,其中“Something”是一个结构。该结构包含对象,每个对象在类中都有自己的公共属性/字段。我想按顺序对列表进行排序 - 但通过在这些嵌套属性/字段中找到的值。然后我想返回这些值的列表,而不是结构。
我知道这很令人困惑,但我在尝试时遇到了麻烦。目前我只得到一个返回的列表,计数为 20(这是我正在使用的完整数据集),但我只想要 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;
}
“Walk”是一个包含“duration”字段的类。这代表步行所需的时间。更具体地说,我在这里的总体目标是找出列表中所有 20 次步行中,哪 3 次步行最快。但是“walks”是 StationWalk 结构的属性,而“duration”是 Walk 的属性。
我该怎么做呢?真的很抱歉,如果这没有得到很好的解释,尽管是自己写的,但我自己却很困惑,但独自试图向其他人解释。感谢任何帮助。
在OrderBy
和Take
都返回一个新的集合,他们不修改现有的集合,所以你需要存储的参考由像方法返回新的集合:
stations = stations.OrderBy(walks => walks.walk.duration).Take(3).ToList();
如果您想在代码中保留对原始列表的引用以供进一步使用,则只需将结果存储在局部变量中:
var lowestThreeStations = stations.OrderBy(walks => walks.walk.duration).Take(3).ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句