2011-07-08 85 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) 

这适用于已排序和未排序的列表。