[英]C# - Getting the 3 lowest values in a List, measured by a public property of the objects within the List
對不起,如果我的術語不是很好,我不是專業的程序員。
我有一個 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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.