我想根据来自和来的模式对列表进行排序
public class Group
{
public string From {get;set;}
public string To { get; set; }
}
我有一个从DB填充的组列表,该列表未按顺序填充
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(记住这里不会有任何重复)
有办法解决这个问题吗?
答案 0 :(得分:0)
您描述的问题可以表示为使用循环访问有向图中的所有节点。它不是......排序。
所以,让我们说节点有一个与之关联的数字。并且从一个节点到另一个节点存在边缘。访问顺序中的访问边缘列表是输出。
您可能会对此链接感兴趣:https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm