zoukankan      html  css  js  c++  java
  • C#的Dictionary值排序和SortedDictionary键排序

    对一个Dictionary<TKey, TValue>进行键排序可以直接用SortedDictionary
     SortedDictionary<TKey, TValue> 泛型类是检索运算复杂度为 O(log n) 的二叉搜索树,其中 n 是字典中的元素数。 

    就这一点而言,它与 SortedList<TKey, TValue> 泛型类相似。 

    这两个类具有相似的对象模型,并且都具有 O(log n) 的检索运算复杂度。

    这两个类的区别在于内存的使用以及插入和移除元素的速度:
    SortedList<TKey, TValue> 使用的内存比 SortedDictionary<TKey, TValue> 少,SortedDictionary<TKey, TValue> 可对未排序的数据执行更快的插入和移除操作:
        它的时间复杂度为 O(log n),而 SortedList<TKey,TValue> 为 O(n),如果使用排序数据一次性填充,SortedList<TKey,TValue>比 SortedDictionary<TKey, TValue> 快。
        每个键/值对都可以作为KeyValuePair<TKey, TValue> 结构进行检索,或作为DictionaryEntry通过非泛型IDictionary接口进行检索。只要键用作SortedDictionary<TKey, TValue> 中的键,它们就必须是不可变的。 
    SortedDictionary<TKey, TValue> 中的每个键必须是唯一的。 

    键不能为 null,但是如果值类型 TValue 为引用类型,该值则可以为空。

    SortedDictionary<TKey, TValue> 需要比较器实现来执行键比较。 可以使用一个接受 comparer 参数的构造函数来指定 IComparer<T> 泛型接口的实现;

    如果不指定实现,则使用默认的泛型比较器 Comparer<T>.Default。 
    如果类型 TKey 实现 System.IComparable<T> 泛型接口,则默认比较器使用该实现。
    对一个Dictionary<TKey, TValue>进行值排序可以用LINQ:

    Dictionary<string, string> MyDictionary = new Dictionary<string, string>();
    MyDictionary = (from entry in MyDictionary 
                               orderby entry.Value ascending
                               select entry).ToDictionary(pair => pair.Key, pair => pair.Value);
  • 相关阅读:
    读书笔记之理想设计的特征
    一些javascript 变量声明的 疑惑
    LINQ 使用方法
    Google MySQL tool releases
    读书笔记之设计的层次
    EF之数据库连接问题The specified named connection is either not found in the configuration, not intended to be used with the Ent
    转载 什么是闭包
    javascript面向对象起步
    Tips
    数据结构在游戏中的应用
  • 原文地址:https://www.cnblogs.com/masahiro/p/10131135.html
Copyright © 2011-2022 走看看