leo*_*ora 3 c# collections sorteddictionary
我在列表中有一个SpecialEvent对象列表
List<SpecialEvent>
Run Code Online (Sandbox Code Playgroud)
我想将它转换为一个排序字典,其中键是SpecialEvent.Date,值是SpecialEvent对象
我基本上想要这样的东西:
list.ToDictionary(r=>r.Date, r=>r)
Run Code Online (Sandbox Code Playgroud)
但是转换为排序字典而不是常规字典
您可以使用以下构造函数SortedDictionary:
var dict = new SortedDictionary<string, SpecialEvent>(list.ToDictionary(r => r.Date, r => r));
Run Code Online (Sandbox Code Playgroud)
或者,作为通用方法:
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));
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以用它作为
SortedDictionary<DateTime, SpecialEvent> sortedEvents = list.ToSortedDictionary(r => r.Date);
Run Code Online (Sandbox Code Playgroud)