2014-01-15 7 views
1

Я пытался найти способ сравнить две строки и вернуть их «общие» слова, учитывая, что строки всегда в нижнем регистре, я хотел создать функцию для этого. примерНайти общие текстовые вхождения в нескольких строках

str1 = "this is a test" 
str2 = "saldkasl test asdasd" 

result = stringcompare(str1, str2) 'returns "test" 

общее слово между двумя строками должно быть «тест» и если две строки имеют два или более общих слов, то функция должна сцепить строки

str1 = "this is another test" 
str2 = "another asdsada test asdsa" 
result = stringcompare(str1, str2) ' returns "another test" 

я нашел полезный link, он ga ве меня идея, но как-то что-то действительно не хватает

псевдокод, что я делаю сейчас это,

**

'1st: separate the words by every space, " ", then store it in an array or list 
'2nd: compare each item on the list, if equal then store to variable 'result' 

**

это нормально? Я думаю, что это очень медленный процесс, и, может быть, есть кто-то там, что есть лучший подход к this..thanks

+0

methinks это уже звуковое решение. как вы храните его в контейнере? Возможно, в этом и проблема. –

ответ

2

Как измерено в VS 2013, ниже решение в среднем на 20% быстрее, чем Guffa-х:

Dim str1 As String = "this is another test" 
Dim str2 As String = "another asdsada test asdsa" 
Dim result As String = String.Join(" ", str1.Split(" "c). 
           Intersect(str2.Split(" "c))) 

Результаты были получены путем циклирования каждого раствора 100000 раз и измерения времени с помощью StopWatch.

+0

Когда я попробовал это, ошибка гласит: «Intersect не является членом System.Array». Я использую vb.net 2005 –

+0

@ Malky.Kid: Вышеописанная версия Visual Studio 2010+. Есть ли причина, по которой вам нужно придерживаться 2005 года? – Neolisk

+0

Вижу, спасибо. Офис не хочет инвестировать в более новые версии визуальной студии :( –

1

Используйте набор хеш-функции для слов в первой строке, то вы можете просто перебрать слов во второй строке и проверить, если они существуют в первом, и подобраться к О (п) производительность:

Dim first As New HashSet(Of String)(str1.Split(" "c)) 
Dim result As String() = str2.Split(" "c).Where(Function(s) first.Contains(s)).ToArray() 
Смежные вопросы