标题: [原创] 比较无聊,写了一个HashTable
效果
霸王龙
Rank: 6Rank: 6
我是菜菜菜菜菜...鸟


UID 17850
精华 1
积分 2159
帖子 1180
威望 1159
阅读权限 70
注册 2004-10-6
来自 福建、福州<=>厦门
状态 离线
 
发表于 2007-3-13 13:20  资料  个人空间  短消息  加为好友 
比较无聊,写了一个HashTable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <SCRIPT LANGUAGE="JavaScript">
  <!--
        function HashTable()
        {       
                this.Items=[];
                this.Count=function(){return this.Items.length;};        //长度               
                this.DictionaryEntry=function(key,value)
                {
                        this.Key=key||null;
                        this.Value=value||null;
                }
                this.Add=function(key,value){this.Items.push(new this.DictionaryEntry(key,value));}
                this.Clear=function(){this.Items.length=0;}
                this.Remove=function(key)
                {
                        var index=this.GetIndexWithKey(key);
                        if(index>-1)        this.Items.splice(index,1);
                }
                this.GetValue=function(key)
                {
                        var index=this.GetIndexWithKey(key);
                        if(index>-1)        return this.Items[index].Value;
                }
                this.ContainsKey=function(key)
                {
                        if(this.GetIndexWithKey(key)>-1)        return true;
                        return false;
                }
                this.ContainsValue=function(value)
                {
                        if(this.GetIndexWithValue(value)>-1)        return true;
                        return false;
                }
                this.Keys=function()
                {
                        var iLen=this.Count();
                        var resultArr=[];
                        for(var i=0;i<iLen;i++)        resultArr.push(this.Items[i].Key);
                        return resultArr;
                }
                this.Values=function()
                {
                        var iLen=this.Count();
                        var resultArr=[];
                        for(var i=0;i<iLen;i++)        resultArr.push(this.Items[i].Value);
                        return resultArr;
                }
                this.IsEmpty=function(){return this.Count()==0;}
                this.GetIndexWithKey=function(key)
                {
                        var iLen=this.Count();
                        for(var i=0;i<iLen;i++)        if(this.Items[i].Key===key)        return i;
                        return -1;
                }
                this.GetIndexWithValue=function(value)
                {
                        var iLen=this.Count();
                        for(var i=0;i<iLen;i++)        if(this.Items[i].Value===value)        return i;
                        return -1;
                }
        }
        var a,b;
        a=document;
        b=a;
        var my=new HashTable();
        my.Add("name","cxp");
        my.Add("age",22);
        my.Add("sex","boy");
        for(var i in my.Items)
        {
                alert("Key:"+my.Items[i].Key+",Value:"+my.Items[i].Value);
        }
        my.Remove("age");
        alert(my.Keys());
  //-->
  </SCRIPT>
</HEAD>

<BODY>
  
</BODY>
</HTML>

高手勿见笑!





真是郁闷啊...
顶部
效果
霸王龙
Rank: 6Rank: 6
我是菜菜菜菜菜...鸟


UID 17850
精华 1
积分 2159
帖子 1180
威望 1159
阅读权限 70
注册 2004-10-6
来自 福建、福州<=>厦门
状态 离线
 
发表于 2007-3-13 13:23  资料  个人空间  短消息  加为好友 
歪了, 但修改不了...

   提示:您可以先修改部分代码再运行






真是郁闷啊...
顶部
winter
超级版主
Rank: 8Rank: 8
软虫


UID 65747
精华 10
积分 5651
帖子 2676
威望 2676
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-3-13 19:03  资料  个人空间  短消息  加为好友 
object是天生的hashtable啊 为什么还要自己写呢?

顶部
效果
霸王龙
Rank: 6Rank: 6
我是菜菜菜菜菜...鸟


UID 17850
精华 1
积分 2159
帖子 1180
威望 1159
阅读权限 70
注册 2004-10-6
来自 福建、福州<=>厦门
状态 离线
 
发表于 2007-3-13 19:49  资料  个人空间  短消息  加为好友 
hashtable总有一些object没有的东西...
如:ContainsKey





真是郁闷啊...
顶部
winter
超级版主
Rank: 8Rank: 8
软虫


UID 65747
精华 10
积分 5651
帖子 2676
威望 2676
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-3-13 20:03  资料  个人空间  短消息  加为好友 
试试在object上加 也许效率会很高

顶部
月影
版主
Rank: 7Rank: 7Rank: 7



UID 24714
精华 8
积分 2955
帖子 1210
威望 1530
阅读权限 100
注册 2005-3-9
状态 离线
 
发表于 2007-3-13 20:08  资料  个人空间  主页 短消息  加为好友  QQ
这个HashTable好像可以插入重复key呢...
那样不会出问题吗??

顶部
月影
版主
Rank: 7Rank: 7Rank: 7



UID 24714
精华 8
积分 2955
帖子 1210
威望 1530
阅读权限 100
注册 2005-3-9
状态 离线
 
发表于 2007-3-13 20:09  资料  个人空间  主页 短消息  加为好友  QQ


QUOTE:
原帖由 [i]winter[/i] 于 2007-3-13 20:03 发表
试试在object上加 也许效率会很高

object上加有一个不好的地方是假如有个方法叫做keys(),那么就不能用"keys"作为HashTable的key了...

顶部
月影
版主
Rank: 7Rank: 7Rank: 7



UID 24714
精华 8
积分 2955
帖子 1210
威望 1530
阅读权限 100
注册 2005-3-9
状态 离线
 
发表于 2007-3-13 20:18  资料  个人空间  主页 短消息  加为好友  QQ


QUOTE:
原帖由 [i]效果[/i] 于 2007-3-13 19:49 发表
hashtable总有一些object没有的东西...
如:ContainsKey

ContainsKey是有的...
直接用in运算符就行了^^

例如:
var hashTable = {a:1, b:2};
alert('a' in hashTable);

顶部
winter
超级版主
Rank: 8Rank: 8
软虫


UID 65747
精华 10
积分 5651
帖子 2676
威望 2676
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-3-13 20:26  资料  个人空间  短消息  加为好友 
就是哈......

顶部
winter
超级版主
Rank: 8Rank: 8
软虫


UID 65747
精华 10
积分 5651
帖子 2676
威望 2676
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-3-13 20:36  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 [i]月影[/i] 于 2007-3-13 20:09 发表


object上加有一个不好的地方是假如有个方法叫做keys(),那么就不能用"keys"作为HashTable的key了...

用一个成员object呀 哪能往自己身上加呢

顶部
月影
版主
Rank: 7Rank: 7Rank: 7



UID 24714
精华 8
积分 2955
帖子 1210
威望 1530
阅读权限 100
注册 2005-3-9
状态 离线
 
发表于 2007-3-13 21:32  资料  个人空间  主页 短消息  加为好友  QQ
来个“月版”的HashTable ^^

   提示:您可以先修改部分代码再运行


顶部
比尔熊
大恐龙
Rank: 4


UID 32205
精华 0
积分 558
帖子 338
威望 342
阅读权限 50
注册 2005-7-4
来自 湖北
状态 离线
 
发表于 2007-3-13 21:55  资料  个人空间  短消息  加为好友 
弱弱问一句, 这样做意义何在?





小娘子, 你就依了我吧!
顶部
winter
超级版主
Rank: 8Rank: 8
软虫


UID 65747
精华 10
积分 5651
帖子 2676
威望 2676
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-3-13 21:56  资料  个人空间  短消息  加为好友 
this.each 月版的标志方法^^
这个还是用数组的哈
object最大的问题在于没法移除 刚想到的 好像object的内部实现就是hash表

顶部
月影
版主
Rank: 7Rank: 7Rank: 7



UID 24714
精华 8
积分 2955
帖子 1210
威望 1530
阅读权限 100
注册 2005-3-9
状态 离线
 
发表于 2007-3-13 22:27  资料  个人空间  主页 短消息  加为好友  QQ


QUOTE:
原帖由 [i]winter[/i] 于 2007-3-13 21:56 发表
this.each 月版的标志方法^^
这个还是用数组的哈
object最大的问题在于没法移除 刚想到的 好像object的内部实现就是hash表

怎么会没法移出涅??
delete操作符就是用来干这个的呀!!
你可别把js的delete操作符认为是C++中的delete操作符一样的意思了
那可就大错特错了!

顶部
月影
版主
Rank: 7Rank: 7Rank: 7



UID 24714
精华 8
积分 2955
帖子 1210
威望 1530
阅读权限 100
注册 2005-3-9
状态 离线
 
发表于 2007-3-13 22:29  资料  个人空间  主页 短消息  加为好友  QQ


QUOTE:
原帖由 [i]winter[/i] 于 2007-3-13 21:56 发表
this.each 月版的标志方法^^
这个还是用数组的哈
object最大的问题在于没法移除 刚想到的 好像object的内部实现就是hash表

object最大的问题不是没法移除...
而是比如正好key叫做"propertyIsEnumerable"或者"isPrototypeOf"
结果就没法用for...in枚举出来了
这个不是比较郁闷嘛...^^

顶部
winter
超级版主
Rank: 8Rank: 8
软虫


UID 65747
精华 10
积分 5651
帖子 2676
威望 2676
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2007-3-13 22:29  资料  个人空间  短消息  加为好友 
delete?听说过 没用过 无知了哈:P

顶部
效果
霸王龙
Rank: 6Rank: 6
我是菜菜菜菜菜...鸟


UID 17850
精华 1
积分 2159
帖子 1180
威望 1159
阅读权限 70
注册 2004-10-6
来自 福建、福州<=>厦门
状态 离线
 
发表于 2007-3-14 09:25  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 [i]月影[/i] 于 2007-3-13 20:08 发表
这个HashTable好像可以插入重复key呢...
那样不会出问题吗??

真该死,连这点都忘记了,呵呵,
改正一下:

this.Add=function(key,value)
                {
                        var index=this.GetIndexWithKey(key);
                        if(index<0)        this.Items.push(new this.DictionaryEntry(key,value));
                        else        this.Items[index].Value=value;
                }
如果存在就修改





真是郁闷啊...
顶部
效果
霸王龙
Rank: 6Rank: 6
我是菜菜菜菜菜...鸟


UID 17850
精华 1
积分 2159
帖子 1180
威望 1159
阅读权限 70
注册 2004-10-6
来自 福建、福州<=>厦门
状态 离线
 
发表于 2007-3-14 09:28  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 [i]winter[/i] 于 2007-3-13 19:03 发表
object是天生的hashtable啊 为什么还要自己写呢?

HashTable本身要的就是一种数据结构,

object这种东西确实是有点像hashtable的功能,

但它不===hashtable

如果用object来模拟倒是可行的!





真是郁闷啊...
顶部
效果
霸王龙
Rank: 6Rank: 6
我是菜菜菜菜菜...鸟


UID 17850
精华 1
积分 2159
帖子 1180
威望 1159
阅读权限 70
注册 2004-10-6
来自 福建、福州<=>厦门
状态 离线
 
发表于 2007-3-14 09:30  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 [i]比尔熊[/i] 于 2007-3-13 21:55 发表
弱弱问一句, 这样做意义何在?

创建字典键/值
IE有自带,FF下没有





真是郁闷啊...
顶部
yxgang
爬虫
Rank: 2



UID 22553
精华 0
积分 110
帖子 43
威望 58
阅读权限 20
注册 2005-1-17
状态 离线
 
发表于 2007-3-14 09:35  资料  个人空间  短消息  加为好友 
以前用过 Scripting.Dictionary,这次长见识了

顶部
 



当前时区 GMT+8, 现在时间是 2008-8-8 07:26
苏ICP备05080427号

Powered by Discuz! 5.5.0  © 2001-2007 51JS.COM
Processed in 0.087150 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 无忧脚本 - Archiver - WAP