簡體   English   中英

基於條件的C#排序列表

[英]C# Sorting List based on a condition

我想根據往返模式對清單進行排序

public class Group
{         
    public string From {get;set;}
    public string To { get; set; }
}

我有一個從數據庫填充的組列表,但未按順序填充

List<Group> myGroup = new List<Group>();

我的群組包含以下項目:

Fr  To
534-527
111-534
527-535
534-111
527-534

應該按以下順序重新安排

527-534
534-111
111-534
534-527
527-535
    public List<Group> SortRepHistoryList(List<Group> group)
    {
        LinkedList<Group> sortedList = new LinkedList<Group>();

        var tempFrom = group.Select(t => t.From).ToList();
        Group lastItem = group.FirstOrDefault(g => !tempFrom.Contain(g.To));

        sortedList.AddLast(lastItem);
        group.Remove(lastItem);

        while (group.Any())
        {
            var prev = group.Where(g => g.To.Equals(lastItem.From));
            if (null == prev)
            {
                return sortedList.ToList();
            }

            else if (prev.Count() == 1)
            {
                sortedList.AddFirst(prev.First());
                lastItem = prev.First();
                group.Remove(lastItem);
            }
            else if (prev.Count() > 1)
            {

            }
        }
        return sortedList.ToList();
    }

這表示從一個代碼到另一個代碼的更改歷史記錄的數據,例如,初始代碼是527,它在一個實例上被修改為534,再次將534修改為111,再次將111修改為534,再次將534修改為527,再次527修改為535,所以這里的最新代碼是535,最舊的值是527(請記住,這里不會有任何重復項)

有辦法解決嗎?

您描述的問題可以表述為通過循環訪問有向圖中的所有節點。 不是嗯...排序。

因此,假設該節點具有與之關聯的數字。 從一個節點到另一個節點有一條邊緣。 輸出按訪問順序排列的訪問邊緣列表。

您可能會對此鏈接感興趣: https : //en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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