2011-07-08 14 views
6

To moja lista:usunąć duplikaty z listy (w vim)

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

Chciałbym wiedzieć, w jaki sposób można usunąć duplikaty z listy.

byłoby również możliwe kiedy dodać element do listy, aby sprawdzić jeśli pozycja jest już na liście (w celu uniknięcia duplikatów?)

+0

Twoje pytanie nie jest jasne. Czy chodzi ci o usuwanie zduplikowanych linii w VIM? – Rahul

+0

Przepraszam, nie z tablicy w vimscript – Reman

Odpowiedz

13

Spróbuj

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

. Drugie pytanie, patrz :h index().

Nawiasem mówiąc, jeśli

  1. wszystkie elementy listy są ciągi;
  2. nie ma pustych ciągów możliwych;
  3. nie dbają o porządek elementów listy

to powinieneś używać słownika zamiast: za duża ilość strun wyszukiwanie duplikatów jest szybsze (i naprawdę nie jest wymagane).

+0

dziękuję bardzo. :) – Reman

3

Ten ex-mode (czyli wprowadzić po :) substytucji regex będzie wyeliminować duplikaty (pod warunkiem, że są konsekutywne):

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

Muszę kochać vima i wszystkie jego subtelności – ojblass

2

Można również przekonwertować listę kluczy w słowniku:

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) 

Działa to dla list posortowanych i nieposortowanych.

Powiązane problemy