2011-07-08 108 views
6

這是我的名單:刪除重複從列表(VIM)

['02', '03', '03', '16', '17', '17', '28', '29', '29'] 

我想知道我可以從列表中刪除重複項。

難道是還可以當我將項目添加到列表中,以檢查 如果該項目已經在列表中(避免重複?)

+0

你的問題不清楚。你的意思是刪除VIM中的重複行嗎? – Rahul

+0

對不起,vimscript – Reman

回答

13

嘗試

let list=['02', '03', '03', '16', '17', '17', '28', '29', '29'] 
let unduplist=filter(copy(list), 'index(list, v:val, v:key+1)==-1') 

。有關第二個問題,請參閱:h index()

順便說一句,如果

  1. 所有列表項都是字符串;
  2. 沒有可能的空字符串;
  3. 你不關心順序列表項

那麼你或許應該用字典來代替:對於大量的字符串搜索重複的速度更快(真的不需要)。

+0

非常感謝。 :) – Reman

3

這種前模式正則表達式替換(即後:進入)將消除重複(只要它們是連續的):

s/\('[0-9]\+'\),\s\+\1/\1/g 
+0

得愛vim及其所有微妙之處 – ojblass

2

您也可以在列表轉換鍵在Dictionary:

let list=['02', '03', '03', '16', '17', '17', '28', '29', '29'] 
let dict = {} 
for l in list 
    let dict[l] = '' 
endfor 
let uniqueList = keys(dict) 

這適用於已排序和未排序的列表。