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

を試してみてください。 2番目の質問については、:h index()を参照してください。ところで

  1. すべてのリスト項目が文字列であれば、
  2. 空の文字列はありません。
  3. あなたは、リスト項目

の順番を気にしないあなたはおそらく代わりに辞書を使用する必要があります。重複の検索文字列の数が多いために高速です(そして実際には必要ありません)。

+0

ありがとうございます。 :) – Reman

3

このEX-モード(すなわち:後に入力します)正規表現置換が(彼らは連続して提供される)重複を排除します:

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

vimとそのすべての微妙さが大好き – ojblass

2

ます。また、辞書のキーにリストを変換することができます:

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) 

これはソート済みリストとソート済みリストの両方で機能します。

関連する問題