标题: Hashtable 的烦恼!
- 叶漂 2006-01-05 11:56 阅读:9389
- 评论:42 查看评论 | 添加评论
不知道把这么一篇不入流的东西放在首页有碍观瞻,但就算是新手也一般是浏览首页,我的目的也是希望给一些碰到类似问题的新手提供点帮助,也希望得到高手的指点。
先看下面的代码

using System;
using System.Collections;

namespace NoSortHashtable
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Hashtable hashTable = new Hashtable();

            hashTable.Add("hunan","changsha");
            hashTable.Add("beijing","beijing");
            hashTable.Add("anhui","hefei");
            hashTable.Add("sichuan","chengdu");
            foreach(string str in hashTable.Keys)
            {
                Console.WriteLine(str + " : " + hashTable[str]);
            }

        }
    }
}

打印的结果是:
    anhui : hefei
    hunan : changsha
    sichuan : chengdu
    beijing : beijing
当然,产生这个结果的原因大家都知道,Hashtable内部的排序机制使然,但我现在就是不想排序,我按什么顺序输入的,就想它再怎么给我输出,怎么办?去Google酷了一下,却因为不知道使用什么关键字去酷,结果没有酷出好的相关问题来。
我想到,ArrayList是不排序的啊,那是不是让ArrayList和Hastable配成良缘,那么它们的结晶就是我想要的呢,既有Hashtable的丰富功能,又可以满足我的BT的要求(不排序),动手了。
[图片]using System;
[图片]using System.Collections;
[图片]
[图片]namespace NoSortHashtable
[图片][图片][图片]{
[图片][图片]    /**//// <summary>
[图片]    /// Summary description for NoSortedHashtable.
[图片]    /// </summary>
[图片]    public class NoSortHashtable : Hashtable
[图片][图片]    [图片]{
[图片]        private ArrayList keys = new ArrayList();
[图片]
[图片]        public NoSortHashtable()
[图片][图片]        [图片]{
[图片]        }
[图片]        
[图片]
[图片]        public override void Add(object key, object value)
[图片][图片]        [图片]{
[图片]            base.Add (key, value);
[图片]            keys.Add (key);
[图片]        }
[图片]
[图片]        public override ICollection Keys
[图片][图片]        [图片]{
[图片]            get
[图片][图片]            [图片]{
[图片]                return keys;
[图片]            }
[图片]        }
[图片]
[图片]        public override void Clear()
[图片][图片]        [图片]{
[图片]            base.Clear ();
[图片]            keys.Clear ();
[图片]        }
[图片]
[图片]        public override void Remove(object key)
[图片][图片]        [图片]{
[图片]            base.Remove (key);
[图片]            keys.Remove    (key);
[图片]        }
[图片]        public override IDictionaryEnumerator GetEnumerator()
[图片][图片]        [图片]{
[图片]            return base.GetEnumerator ();
[图片]        }
[图片]
[图片]    }
[图片]}
[图片]

再试
            hashTable = new NoSortHashtable();

            hashTable.Add("hunan","changsha");
            hashTable.Add("beijing","beijing");
            hashTable.Add("anhui","hefei");
            hashTable.Add("sichuan","chengdu");
            foreach(string str in hashTable.Keys)
            {
                Console.WriteLine(str + " : " + hashTable[str]);
            }

打印结果:
    hunan : changsha
    beijing : beijing
    anhui : hefei
    sichuan : chengdu

问题解决!!
应该很早之前就有人这么解决,只是我不知道而已,高手也应该有更好的办法,只是我想不到而已!
见笑,见谅!
查看评论 | 添加评论
返回顶部 | 返回首页