2

我在字典中有一些记录,我需要根据创建日期(CDate)和修改日期(MDate)对数据进行排序。创建记录时,我的 CDate 将具有当前日期时间,但 MDate 将是 1/1/0001 12:00:00 AM。

这是用于排序的示例数据和代码。

CDate MDate
4/30/2013 4:43:41 PM 4/30/2013 4:46:47 PM 4/30/2013
4:43:28 PM 4/30/2013 4:46:36 PM
4/30/ 2013 年下午 4:43:54 2013 年 4 月 30 日下午 4:46:16 2013 年 4 月 30 日下午 5:03:13 0001 年 1 月 1 日上午
12:00:00

代码:

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);

根据排序,我需要像这样按降序对数据进行排序。
CDate MDate
4/30/2013 5:03:13 PM 1/1/0001 12:00:00 AM
4/30/2013 4:43:41 PM 4/30/2013 4:46:47 PM
4/30/ 2013 年下午 4:43:28 2013 年 4 月 30 日下午 4:46:36 2013 年 4 月 30 日下午 4:43:54 2013 年 4 月 30 日下午
4:46:16

但是上述代码不起作用。有任何想法吗?

4

2 回答 2

8

根据文档,字典中的项目顺序未定义:

返回项目的顺序未定义。

如果您需要一个允许通过密钥进行 O(1) 访问的结构,请使用Dictionary<TKey, TValue>.
如果您需要有序结构,请使用类似List<KeyValuePair<TKey, TValue>>.

于 2013-05-02T07:25:33.280 回答
0

试试SortedDictionary

您可以创建自己的 ToSortedDictionary<(this IEnumerable source, Func keySelector, Func elementSelector, IEqualityComparer comparer):

public static SortedDictionary<TKey, TElement> ToSortedDictionary<TSource, TKey, TElement>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector,
    Func<TSource, TElement> elementSelector,
    IEqualityComparer<TKey> comparer)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }

    if (keySelector == null)
    {
        throw Error.ArgumentNull("keySelector");
    }

    if (elementSelector == null)
    {
        throw Error.ArgumentNull("elementSelector");
    }

    var dictionary = new SortedDictionary<TKey, TElement>(comparer);
    foreach (TSource local in source)
    {
        dictionary.Add(keySelector(local), elementSelector(local));
    }

    return dictionary;
}
于 2013-05-02T10:43:38.750 回答