2012-06-27 3 views
1

ОК, поэтому я хочу проверить, содержит ли большая строка один (любой) из многих других строк в массиве.VB.net самый быстрый способ проверить, содержит ли строка 1 из многих строк

Я могу пропустить этот массив и выполнить 'if majorring.contains (arrayitem) что-то сделать, а затем выйти для', но я чувствую, что это, вероятно, неэффективно, особенно если массив строк очень большой.

Плюс производительность будет зависеть от позиции в массиве найденной строки Есть ли лучший способ сделать это?

+0

Вам небезразлична чувствительность к случаю/культуре? И это String [] или ArrayList или List или какой-либо другой контейнер «array»? – StingyJack

+0

Меня не волнует случай. Его прямой массив, содержащий строковые значения, например массив (0) = 'cat' array (1) = 'dog'. – Steve

+0

Если данные очень большие (и потенциально могут быть намного больше), вам, вероятно, лучше разместить его в базе данных и использовать SQL. –

ответ

3

Лучший подход, я думаю, использовать регулярные выражения

Imports System.Text.RegularExpressions 

Dim arrayitems As New Regex(arrayitem(0) & "|" & arrayitem(1) & "|" & arrayitem(2)) 

If arrayitems.IsMatch(largestring) Then 
    'Exists 
    '... 
End If 

Другой альтернативой является использование IndexOf, который (теоретически) немного быстрее, чем Содержит

Dim str As String = "Hello World." 

' Does the string contain "World"? 
If (str.IndexOf("World") <> -1) Then 
    Console.Write("string contains 'World'") 
Else 
    Console.Write("string does not contain 'World'") 
End If 
+0

Я тестировал регулярное выражение, и он медленнее, чем петлевой подход. И я сомневаюсь, что производительность IndexOf будет намного лучше, чем Содержит, но стоит попробовать. –

+0

Похоже, что я буду придерживаться своего метода, хотя я попытаюсь подставить Contains для IndexOf – Steve

1

дим результат As String() = Array.FindAll (обр, функция (s) s.Contains ("все"))

+0

Если это ошибочно, это ищет в массиве для одного значения, я хочу искать в одной строке, чтобы увидеть, содержит ли он какое-либо из нескольких значений (содержится в массиве). Мне даже не нужно возвращать найденную строку , просто знайте, что он содержит хотя бы один из них. – Steve

+0

О, я вижу ... да, это немного сложнее, но это может быть началом. – aserwin

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