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

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

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

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

enter code here class Busdetail { public int BusNo { get; set; } public DateTime InTime { get; set; } public DateTime OutTime { get; set; } } 

Sorted Dictionary将始终对键进行排序,因此无法重新排列它的数据,因此它们可以在键的其他任何位置上排序。 你可以做的是将数据放到另一个结构(某种IOrderedEnumerable )中,在那里它们可以按键的其他东西进行排序。

如果你想丢弃密钥然后获取值

 var sortedValues = dictionary.Values.OrderBy(busDetail => busDetail.InTime); 

将起作用,sortedValues的类型将是IOrderedEnumerable 。 如果您仍需要同时保留键和值,则可以执行以下操作:

 var sortedElements = dictionary.OrderBy(kvp => kvp.Value.InTime); 

这将返回IOrderedEnumerable> 。 您可以在这两个集合中的任何一个上进行操作,也可以将它们绑定到网格的数据源。

SortedDictionary不能按值排序,但您可以提取已排序的值列表,正如其他答案所指出的那样。

您要做的是使用keyvaluepairs列表,然后对其进行排序,如下所示:

 List> busses = GetMyListOfBusses(); busses.Sort((first, next) => { return first.Value.InTime.CompareTo(next.Value.Intime); }); 

此时,您的keyvaluepair总线列表将按InTime排序

我想你可以使用你的键和值的SortedSet和Tuple,如:SortedSet>((a,b)=>(a.Item2.CompareTo(b.Item2));

您可以使用Linq查询。

 var D = new SortedDictionary(); var qD = from kvp in D orderby kvp.Value select kvp ;