我有一个SortedDictionary,键是一个int值,每个键的匹配值是一个类对象。该类包含一个int和一个两个日期时间变量。
我需要根据我班级的InTime日期时间对SortedDictionary进行排序。因此,当我执行foreach循环遍历SortedDictionary时,我将根据日期时间对它们进行排序。
这可能吗?我怎样才能实现它?
enter code here
class Busdetail
{
public int BusNo { get; set; }
public DateTime InTime { get; set; }
public DateTime OutTime { get; set; }
}
答案 0 :(得分:11)
Sorted Dictionary将始终对键进行排序,因此无法重新排列它的数据,因此它们可以在其他任何键上排序。你可以做的是将数据放到另一个结构(某种IOrderedEnumerable
)中,在那里它们可以按照键的其他东西进行排序。
如果您想丢弃密钥并获取值,那么
var sortedValues = dictionary.Values.OrderBy(busDetail => busDetail.InTime);
将起作用,sortedValues的类型将为IOrderedEnumerable<BusDetail>
。
如果你仍然需要保留键和值,你可以这样做:
var sortedElements = dictionary.OrderBy(kvp => kvp.Value.InTime);
将返回IOrderedEnumerable<KeyValuePair<int, BusDetail>>
。
你可以在这两个集合中的任何一个上foreach
,或者你可以将它们绑定到网格的数据源。
答案 1 :(得分:2)
SortedDictionary不能按值排序,但您可以提取已排序的值列表,正如其他答案所指出的那样。
您要做的是使用keyvaluepairs列表,然后对其进行排序,如下所示:
List<KeyValuePair<int, BusDetail>> busses = GetMyListOfBusses();
busses.Sort((first, next) => {
return first.Value.InTime.CompareTo(next.Value.Intime);
});
此时,您的keyvaluepair总线列表将按InTime
排序答案 2 :(得分:1)
我认为您可以使用您的键和值的SortedSet和Tuple,例如: SortedSet的&GT; ((A,B)=&GT;(a.Item2.CompareTo(b.Item2));
答案 3 :(得分:0)
您可以使用Linq查询。
13 => 1101
=> 0010 (one's complement)
+1
-----
0011 => 3 since sign bit was 1 so s2.k = -3
-----