基于值而不是键对SortedDictionary进行排序

Huk*_*and 4 c#

我有一个SortedDictionary,键是一个int值,每个键的匹配值是一个类对象.该类包含一个int和一个两个datetime变量.

我需要根据我班级的InTime日期时间对SortedDictionary进行排序.因此,当我做一个foreach循环我的SortedDictionary时,我会根据日期时间对它们进行排序.

这可能吗?我怎样才能实现它?

enter code here
 class Busdetail
    {
        public int BusNo { get; set; }
        public DateTime InTime { get; set; }
        public DateTime OutTime { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

SWe*_*eko 12

Sorted Dictionary将始终对键进行排序,因此无法重新排列它的数据,因此它们可以在其他任何键上排序.你可以做的是将数据转换成另一种结构(某种形式IOrderedEnumerable),在这种结构中,它们可以按照键的其他结构进行排序.

如果你想丢弃键,然后获取值

var sortedValues = dictionary.Values.OrderBy(busDetail => busDetail.InTime);
Run Code Online (Sandbox Code Playgroud)

将工作,sortValues的类型将是IOrderedEnumerable<BusDetail>.如果您仍需要同时保留键和值,则可以执行以下操作:

var sortedElements = dictionary.OrderBy(kvp => kvp.Value.InTime);
Run Code Online (Sandbox Code Playgroud)

这将返回一个IOrderedEnumerable<KeyValuePair<int, BusDetail>>.您可以foreach在这两个集合中的任何一个上进行,也可以将它们绑定到网格的数据源.