簡體   English   中英

C# - 獲取列表中的 3 個最低值,由列表中對象的公共屬性衡量

[英]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 的屬性。

我該怎么做呢? 真的很抱歉,如果這沒有得到很好的解釋,盡管是自己寫的,但我自己卻很困惑,但獨自試圖向其他人解釋。感謝任何幫助。

OrderByTake都返回一個新集合,它們不會修改現有集合,因此您需要存儲對由以下方法返回的新集合的引用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM