W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
我們講到的最后一種Vimscript類型將是字典。 Vimscript字典類似于Python中的dict,Ruby中的hash,和Javascript中的object。
字典用花括號(hào)創(chuàng)建。值是異質(zhì)的,但鍵會(huì)被強(qiáng)制轉(zhuǎn)換成字符串。就是這么簡單,你沒想到吧?
執(zhí)行這個(gè)命令:
:echo {'a': 1, 100: 'foo'}
Vim顯示{'a':1,'100':'foo'}
,這說明Vimscript的確把鍵強(qiáng)制轉(zhuǎn)換為字符串,同時(shí)保留值不變。
Vimscript避免了Javascript標(biāo)準(zhǔn)的蠢笨之處,允許你在字典的最后一個(gè)元素后留下一個(gè)逗號(hào)。 (譯注:在Javascript的標(biāo)準(zhǔn)中,最后一個(gè)元素后面不能留下一個(gè)逗號(hào)。 但在Firefox里,留下那個(gè)逗號(hào)是允許的,不過這是Firefox的問題。) 執(zhí)行下面的命令:
:echo {'a': 1, 100: 'foo',}
Vim再次顯示{'a':1,'100':'foo'}
(譯注:結(jié)尾小逗號(hào)不見了)。你應(yīng)該_總是_在字典里留下一個(gè)多余的逗號(hào),?_尤其_是當(dāng)字典的定義跨越多行的時(shí)候,這樣增加新項(xiàng)的時(shí)候?qū)⒉蝗菀追稿e(cuò)。
查找字典中的一個(gè)值的語法跟大多數(shù)語言是一樣的。執(zhí)行這個(gè)命令:
:echo {'a': 1, 100: 'foo',}['a']
Vim顯示1
。試試使用不是字符串的索引:
:echo {'a': 1, 100: 'foo',}[100]
Vim會(huì)在查找之前把索引強(qiáng)制轉(zhuǎn)換成字符串,因?yàn)殒I只能是字符串,這么做是合理的。
當(dāng)鍵僅由字母,數(shù)字和/或下劃線組成時(shí),Vimscript也支持Javascript風(fēng)格的"點(diǎn)"查找。 試試下面的命令:
:echo {'a': 1, 100: 'foo',}.a
:echo {'a': 1, 100: 'foo',}.100
兩種情況下,Vim都顯示了正確的元素。使用哪種索引字典的方式取決于你自己的偏好。
像對(duì)待變量一樣賦值給字典中的項(xiàng),就可以在字典中輕松地添加新的項(xiàng)。
:let foo = {'a': 1}
:let foo.a = 100
:let foo.b = 200
:echo foo
Vim顯示{'a': 100, 'b': 200}
。賦值和添加一個(gè)新項(xiàng)的方式是一樣的。
有兩種方法可以移除字典中的項(xiàng)。執(zhí)行下面的命令:
:let test = remove(foo, 'a')
:unlet foo.b
:echo foo
:echo test
Vim顯示{}
和100
。remove
函數(shù)將移除給定字典的給定鍵對(duì)應(yīng)的項(xiàng),并返回被移除的值。?unlet
命令也能移除字典中的項(xiàng),只是不返回值。
你不能移除字典中不存在的項(xiàng)。試試執(zhí)行這個(gè)命令:
:unlet foo["asdf"]
Vim拋出一個(gè)錯(cuò)誤。
選擇remove
還是unlet
很大程度上取決于個(gè)人偏好。如果非要我說,我推薦使用remove
, 因?yàn)樗?code>unlet更靈活。remove
可以做任何unlet
能做的事,反過來不成立。 所以選擇remove
可以一招鮮,吃遍天。
就像列表,Vim有許許多多內(nèi)置的字典函數(shù)。執(zhí)行下面的命令:
:echom get({'a': 100}, 'a', 'default')
:echom get({'a': 100}, 'b', 'default')
Vim顯示100
和default
,如同列表版本的get
函數(shù).
你也可以檢查給定字典里是否有給定的鍵。執(zhí)行這個(gè)命令:
:echom has_key({'a': 100}, 'a')
:echom has_key({'a': 100}, 'b')
Vim顯示1
和0
。不要忘了,Vimscript把0
當(dāng)作假而其他數(shù)字則是真。
你可以用items
從一個(gè)字典中獲取對(duì)應(yīng)的鍵值對(duì),執(zhí)行這個(gè)命令:
:echo items({'a': 100, 'b': 200})
Vim將顯示[['a',100],['b',200]]
這樣的嵌套列表。到目前為止,Vimscript字典_不一定_是有序的, 所以不要指望items
的返回結(jié)果是有序的!
你可以用keys
返回字典的所有的鍵和values
返回所有的值。它們的作用一如其名——你可以查一下。
閱讀:help Dictionary
??赐晁?。注意大寫D
。
閱讀:help get()
.
閱讀:help has_key()
.
閱讀:help items()
.
閱讀:help keys()
.
閱讀:help values()
.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: