基于值而不是键对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 ;