2016-04-24 6 views
1

Я пытаюсь сделать небольшую программу VB для удаления повторяющихся строк и пустых строк из обычного текста.
У меня есть вход RichTextBox, но в конце концов я не знаю, каков тип возвращаемого объекта, может быть, это массив или список?RichTextBox тип вывода и удаление дубликатов

Кроме того, я пытаюсь найти наиболее эффективный способ удалить повторяющиеся строки из большого простого текста (ов), в Python Я делаю это так:

lines_nodupes = {} 
for elt in lines : 
lines_nodupes[elt] = "" 

Поскольку вы не можете иметь в два раза то же самое ключ, никакие дубликаты не хранятся в строке_nodupes dictionnary, и я могу перечислить его для доступа к строкам.

ответ

1

Есть два свойства, которые можно использовать:

  1. Lines возвращает массив строк
  2. Text возвратит весь текст в виде строки

См RichTextBox от MSDN

Если вы хотите сделать так, как в Python:

Dim noDup as new Dictionary(Of String, String) 

For Each line in MyRichTextBox.Lines 
    if not noDup.ContainsKey(line) then 
     noDUp.add(line, "") 
    End if 
Next 

Вы также можете сделать (как это было предложено VisualVincent в коментарии):

Dim noDup as new List(Of String) 

For Each line in MyRichTextBox.Lines 
    if not noDup.Contains(line) then 
     noDUp.add(line) 
    End if 
Next 

который немного медленнее, но разница не будет видно, если у вас есть очень длинный список элементов.

+0

Зачем использовать словарь? Используйте «Список (Of T)» и проверьте '.Contains()'. –

+1

Поскольку я считаю, что словарь будет более эффективным с точки зрения поиска строки ... 'List.Contains()' будет сравнивать каждый элемент и запускаться в O (N), в то время как словарь проверяет Hashcode и работает в худшем случае в O (N) –

+0

Точка, но итерация '.Contains()' не займет много времени, если список не длинный. –

Смежные вопросы