我的一个类用hashtable保存语言,程序类似下面
class l{
private Hashtable lang = new Hashtable();
l(){
lang.add("en", g("en"));
lang.add("zh", g("zh"));
lang.add("big5", g("big5"));
}
Hashtable g(string langName){
Hashtable tmp = new Hashtable();
.....
return tmp;
}
string get(string langVarName,string langName){
//这种转换效率高么?有更好的办法么?
Hashtable tmp = (Hashtable)lang[langName];
return (string)tmp[langVarName];
}
}我 不是 想问多语言怎么实现,而是想知道hashtable的效率怎么样,怎样提高效率.
谢谢.
class l{
private Hashtable lang = new Hashtable();
l(){
lang.add("en", g("en"));
lang.add("zh", g("zh"));
lang.add("big5", g("big5"));
}
Hashtable g(string langName){
Hashtable tmp = new Hashtable();
.....
return tmp;
}
string get(string langVarName,string langName){
//这种转换效率高么?有更好的办法么?
Hashtable tmp = (Hashtable)lang[langName];
return (string)tmp[langVarName];
}
}我 不是 想问多语言怎么实现,而是想知道hashtable的效率怎么样,怎样提高效率.
谢谢.
如果楼主不放心,可以自己实现一下IEqualityComparer接口,使用自己的比对方法,然后用这个实例来初始化hashtable。
http://topic.csdn.net/u/20081106/12/986048f8-afb7-41f2-964b-7a5cb739116d.html
要不然 MicroSoft 也会,在视图状态的时候自己都采用HashTable了。
检索速度取决于为 TKey 指定的类型的哈希算法的质量。
只要对象用作 Dictionary 中的键,它就不能以任何影响其哈希值的方式更改。使用字典的相等比较器比较时,Dictionary 中的任何键都必须是唯一的。键不能为空引用(在 Visual Basic 中为 Nothing),但是如果值类型 TValue 为引用类型,该值则可以为空。Dictionary 需要一个相等实现来确定键是否相等。可以使用一个接受 comparer 参数的构造函数来指定 IEqualityComparer 泛型接口的实现;如果不指定实现,则使用默认的泛型相等比较器 EqualityComparer.Default。如果类型 TKey 实现 System.IEquatable 泛型接口,则默认相等比较器会使用该实现。Dictionary 的容量是 Dictionary 可以包含的元素数。在此实现中,Dictionary 的默认初始容量为 3;但该默认值可能在 .NET Framework 的未来版本中更改。当向 Dictionary 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量。对于枚举而言,字典中的每一项都被视为一个表示值及其键的 KeyValuePair 结构进行处理。项返回的顺序未定义。
但是如果是VS2003 的话建议使用 as 如:Hashtable tmp = (Hashtable)lang[langName];
return (string)tmp[langVarName]; ->Hashtable tmp = lang[langName] as Hashtable;
return tmp[langVarName] as string;
hashtable效率不错