注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

chunwaihome 的博客

 
 
 

日志

 
 

Map Plugin  

2010-01-03 20:07:32|  分类: Powerpro Plugin |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Map是一種把鍵對像和值對像進行關聯的容器,而一個值對像又可以是一個Map,依次類推,這樣就可形成一個多級映射。對於鍵對像來說,像Set一樣,一個Map容器中的鍵對像不允許重複,這是為了保持查找結果的一致性;如果有兩個鍵對像一樣,那你想得到那個鍵對像所對應的值對像時就有問題了,可能你得到的並不是你想的那個值對象,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。當然在使用過程中,某個鍵所對應的值對象可能會發生變化,這時會按照最後一次修改的值對象與鍵對應。對於值對像則沒有唯一性的要求。你可以將任意多個鍵都映射到一個值對像上,這不會發生任何問題(不過對你的使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值對像)。Map有兩種比較常用的實現:HashMap和TreeMap。HashMap也用到了哈希碼的算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它便有一些擴展的方法,比如firstKey(),lastKey()等,你還可以從TreeMap中指定一個範圍以取得其子Map。

  • Map與Vector的分別

Maps可以是一連串的Strings。每一個String可以被另一個String進入,它稱為 "Key" 。譬如在一個名為 m 的Map 中你可以用以下語法m["k"] 進入一個名為 "k" 的string,你亦可以用 m["k'] = expr 在map中加入新的元素。

Maps用了一種名為 " hashing algorithm " 的技術,因此它十分有效的速查方法。最典型的Map用途是我們日常所用的字典(dictionary) , key是一個 字詞(word) 而字詞解釋就是 String 。

Map與Vector兩者都能儲存Strings。但Vector只能用Integer index來儲存Strings,而Map能夠儲存任何型式的String。Vector儲存的資料有次序的,而Map就沒有次序性的。因此Vector在進入儲存元素時會稍微快過Map。

Creating Maps

語法:

m = map.create(size,usecase)

創作一個新的Map名為m,size參數表示在m裏可以包括多個key和value,數值可以是1至50的任何值。Maps 可以儲存任何數量的元素,但最快的查閱方法是 size 大過 strings的數目。Usecase是可缺省參數,如果將它設為 1 的話,字元的大小楷將被採用。例如m["abc"] 不同於 m["ABC"]

如果缺省usercase參數或將它設為 0 的話,字元的大小楷將不被考盧,因為 m["abc"]  m["ABC"] 被視為相等的。

Other Map Functions

  • Destroy

m=map.destroy(m)
m.destroy

清除在記憶体裏的m 和它的所有元素, 回返值是0 如果m不再是一個有效的map。

  • Exists

map.exists(m)
m.exist

Returns 1 if m is a valid map; 0 otherwise

  • SET

map.set(m,k,val)
m.set(k,val)
m[k]= val

Assigns the string val to key k of map m,

例如

m["good"]="bye"

  • GET


val=map.get(m,k)
m.get(k)
val=m[k]

Retrieves value for key k of map m

例如

win.debug(m["good"])

 

  • LOCALCOPY


local m
m=map.localcopy(arg(1)

This service must be used if you want to create a local variable with a reference to a map which is passed as an argumen

  • DELETE


map.delete(m,k)
m.delete(k)

Deletes key k from map

例如

m.delete("good")

  • DELETEALL


map.deleteall(m)
m.deleteall
Deletes all keys and values from map m, map.length set to 0

  • LENGTH


len=map.length(m)
m.length

顯示m裏包括了多少對key-value

  • CAPACITY


len=map.capacity(m)
len=m.capacity

Sets len to number total number of entries in the lookup table, which is a power of 2 greater than the size specified by map.create.

  • SLOTSUSED


len=map.slotused(m)
len=m.slotused

  • RESTART


map.restart(m)
m.restart

Used to list the elements of the map.  Resets so that next usage of map.getnext will retrieve first key.

  • EOF


map.eof(m)
m.eof

Returns 1 if the map.length is 0 or if preceding call to map.getnext failed because there were no more keys to retrieve

  • GETNEXT


k=map.getnext(m)
k=m.getnext

Allows you to retrieve all the keys in a map in no particular order

 

Macros.txt

"dog" = "mammal"
"cat" = "mammal"

"black widow spider" = "arachnid"
"beetle"= "insect

 

m = map.create("600")
fp = file.open("c:/macros.txt", "r")
if (fp gt 0) do                                      ; if (fp gt 0) do 亦可寫成 if(fp>0)do
   for (1)
      line = file.readstring(fp)
      if (file.eof(fp))
         break
      if (line != "") do
         eq = index(line, "=")
         if (eq gt 1) do
            key = select(line, eq-1)
            val = remove(line, eq)
           m[key] = val
         else
            MessageBox("ok", "Invalid macro line'r"++line)
         endif

      endif
   endfor
   file.close(fp)

else
    MessageBox ("ok", "Cannot open file c:\macros.txt")

endif

  评论这张
 
阅读(1193)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017