none
Dictionary排序 RRS feed

答案

  • 参照下这里,有三种实现方法

    http://blog.csdn.net/meifage2/article/details/6623272


    http://blog.csdn.net/zx13525079024
    • 已标记为答案 Paul Zhou 2011年11月18日 7:42
    2011年11月11日 7:53
  • 可以不用Linq吗?是按照里面的Dictonary中的value排序的


    可以麻烦以后一次性把问题说清楚吗?

    你可以采用“开心”办法,也可以使用我下一种实现了IComparer<T>的方法——

    namespace A
    {       
        class MyDictionary<K,V>:Dictionary<K,V>   
        {      
            /// <summary>
            /// 内部类实现,对每一个KeyValuePair进行比较
            /// </summary>
           private class MyComparer:IComparer<KeyValuePair<K,V>>
           {
               public int Compare(KeyValuePair<K, V> x, KeyValuePair<K, V> y)
               {
                   return x.Value.ToString().CompareTo(y.Value.ToString());
               }
           }
            public new void Add(K key,V value)       
            {            
                //不允许重复添加键Key!           
                if (!this.ContainsKey(key))          
                {               
                    //先添加                
                    base.Add(key, value);               
                    //内部对自己排序               
                    List<KeyValuePair<K, V>> contents = new List<KeyValuePair<K, V>>(this);
                    contents.Sort(new MyComparer());
                    Clear();               
                    foreach (var item in contents)              
                    {                   
                        base.Add(item.Key, item.Value);                
                    }           
                }      
            }    
        }    
        class Program   
        {       
            static void Main(string[] args)       
            {           
                Random r = new Random(DateTime.Now.Millisecond);           
                MyDictionary<MyDictionary<stringstring>, string> m = new MyDictionary<MyDictionary<stringstring>, string>();             //内部的Dictionary1           
                MyDictionary<stringstring> inner = new MyDictionary<stringstring>();            
                //随机填充1           
                for (int i = 1; i < 11; i++)           
                {                
                    inner.Add(i.ToString(), r.Next(1, 11).ToString());            
                }            
                //内部的Dictionary2           
                MyDictionary<stringstring> inner2 = new MyDictionary<stringstring>();           
                //随机填充2            
                for (int i = 1; i < 11; i++)            
                {               
                    inner2.Add(i.ToString(), r.Next(1, 11).ToString());            
                }            
                m.Add(inner, r.Next(1,11).ToString());           
                m.Add(inner2, r.Next(1, 11).ToString());            
                //输出            
                foreach (var item in m)            
                {                
                    Console.WriteLine("Value——"+item.Value);                 
                    //遍历内部的               
                    foreach (var pair in item.Key)               
                    {                   
                        Console.WriteLine("Value:"+pair.Value+"\tKey:"+pair.Key);              
                    }               
                    Console.WriteLine();           
                }      
            }    
        }
    }

    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    • 已标记为答案 Paul Zhou 2011年11月18日 7:42
    2011年11月12日 4:49
    版主

全部回复

  • namespace A
    {
       
        class MyDictionary<K,V>:Dictionary<K,V>
        {
            public new void Add(K key,V value)
            {
                //不允许重复添加键Key!
                if (!this.ContainsKey(key))
                {
                    //先添加
                    base.Add(keyvalue);
                    //内部对自己排序
                    var sorted = (this.OrderBy(p => p.Value).Select(pair => pair)).ToList();

                    Clear();
                    foreach (var item in sorted)
                    {
                        base.Add(item.Keyitem.Value);
                    }

                }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Random r = new Random(DateTime.Now.Millisecond);

                MyDictionary<MyDictionary<stringstring>string> m = new MyDictionary<MyDictionary<stringstring>string>();

                //内部的Dictionary1
                MyDictionary<stringstring> inner = new MyDictionary<stringstring>();
                //随机填充1
                for (int i = 1i < 11i++)
                {
                    inner.Add(i.ToString(), r.Next(111).ToString());
                }

                //内部的Dictionary2
                MyDictionary<stringstring> inner2 = new MyDictionary<stringstring>();
                //随机填充2
                for (int i = 1i < 11i++)
                {
                    inner2.Add(i.ToString(), r.Next(111).ToString());
                }

                m.Add(innerr.Next(1,11).ToString());
                m.Add(inner2r.Next(111).ToString());

                //输出
                foreach (var item in m)
                {
                    Console.WriteLine("Value——"+item.Value);

                    //遍历内部的
                    foreach (var pair in item.Key)
                    {
                        Console.WriteLine("Value:"+pair.Value+"\tKey:"+pair.Key);
                    }
                    Console.WriteLine();
                }
            }
        }
    }


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2011年11月10日 8:41
    版主
  • 可以不用Linq吗?是按照里面的Dictonary中的value排序的
    2011年11月10日 8:54
  • 参照下这里,有三种实现方法

    http://blog.csdn.net/meifage2/article/details/6623272


    http://blog.csdn.net/zx13525079024
    • 已标记为答案 Paul Zhou 2011年11月18日 7:42
    2011年11月11日 7:53
  • 可以不用Linq吗?是按照里面的Dictonary中的value排序的


    可以麻烦以后一次性把问题说清楚吗?

    你可以采用“开心”办法,也可以使用我下一种实现了IComparer<T>的方法——

    namespace A
    {       
        class MyDictionary<K,V>:Dictionary<K,V>   
        {      
            /// <summary>
            /// 内部类实现,对每一个KeyValuePair进行比较
            /// </summary>
           private class MyComparer:IComparer<KeyValuePair<K,V>>
           {
               public int Compare(KeyValuePair<K, V> x, KeyValuePair<K, V> y)
               {
                   return x.Value.ToString().CompareTo(y.Value.ToString());
               }
           }
            public new void Add(K key,V value)       
            {            
                //不允许重复添加键Key!           
                if (!this.ContainsKey(key))          
                {               
                    //先添加                
                    base.Add(key, value);               
                    //内部对自己排序               
                    List<KeyValuePair<K, V>> contents = new List<KeyValuePair<K, V>>(this);
                    contents.Sort(new MyComparer());
                    Clear();               
                    foreach (var item in contents)              
                    {                   
                        base.Add(item.Key, item.Value);                
                    }           
                }      
            }    
        }    
        class Program   
        {       
            static void Main(string[] args)       
            {           
                Random r = new Random(DateTime.Now.Millisecond);           
                MyDictionary<MyDictionary<stringstring>, string> m = new MyDictionary<MyDictionary<stringstring>, string>();             //内部的Dictionary1           
                MyDictionary<stringstring> inner = new MyDictionary<stringstring>();            
                //随机填充1           
                for (int i = 1; i < 11; i++)           
                {                
                    inner.Add(i.ToString(), r.Next(1, 11).ToString());            
                }            
                //内部的Dictionary2           
                MyDictionary<stringstring> inner2 = new MyDictionary<stringstring>();           
                //随机填充2            
                for (int i = 1; i < 11; i++)            
                {               
                    inner2.Add(i.ToString(), r.Next(1, 11).ToString());            
                }            
                m.Add(inner, r.Next(1,11).ToString());           
                m.Add(inner2, r.Next(1, 11).ToString());            
                //输出            
                foreach (var item in m)            
                {                
                    Console.WriteLine("Value——"+item.Value);                 
                    //遍历内部的               
                    foreach (var pair in item.Key)               
                    {                   
                        Console.WriteLine("Value:"+pair.Value+"\tKey:"+pair.Key);              
                    }               
                    Console.WriteLine();           
                }      
            }    
        }
    }

    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    • 已标记为答案 Paul Zhou 2011年11月18日 7:42
    2011年11月12日 4:49
    版主