我在列表中有一个 SpecialEvent 对象列表
List<SpecialEvent>
我想将它转换为一个排序字典,其中键是 SpecialEvent.Date,值是 SpecialEvent 对象
我基本上想要类似的东西:
list.ToDictionary(r=>r.Date, r=>r)
但这会转换为排序字典而不是常规字典
我在列表中有一个 SpecialEvent 对象列表
List<SpecialEvent>
我想将它转换为一个排序字典,其中键是 SpecialEvent.Date,值是 SpecialEvent 对象
我基本上想要类似的东西:
list.ToDictionary(r=>r.Date, r=>r)
但这会转换为排序字典而不是常规字典
您可以使用以下构造函数SortedDictionary
:
var dict = new SortedDictionary<string, SpecialEvent>(list.ToDictionary(r => r.Date, r => r));
或者,作为通用方法:
public static SortedDictionary<T1,T2> ToSortedDictionary<Tin,T1,T2>(this List<Tin> source, Func<Tin,T1> keyselector, Func<Tin,T2> valueselector)
{
return new SortedDictionary<T1,T2>(source.ToDictionary(keyselector, valueselector));
}
public static SortedDictionary<TKey, TValue> ToSortedDictionary<TKey, TValue>(this IEnumerable<TValue> seq, Func<TValue, TKey> keySelector)
{
var dict = new SortedDictionary<TKey, TValue>();
foreach(TValue item in seq)
{
dict.Add(keySelector(item), item);
}
return dict;
}
那么您可以将其用作
SortedDictionary<DateTime, SpecialEvent> sortedEvents = list.ToSortedDictionary(r => r.Date);
请注意,SortedDictionary
不支持重复键。如果您有两个或更多的事件具有相同的日期,您最终会得到一个ArgumentException
说法:具有相同键的条目已经存在。
因此,更好的方法可能是对您的事件列表进行排序:
list.Sort((a, b) => a.Date.CompareTo(b.Date));
这将对您的事件执行有效的就地快速排序。结果是事件列表按日期升序排序。