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