Eğer bir dize listeden bir öğe (dizgi) varsa - kontrol etmek için bu kodu yazmak için daha iyi bir yol var mı?
Kod: aşağıdaki blok için
For I = 0 To listOfStrings.Count - 1
If myString.Contains(lstOfStrings.Item(I)) Then
Return True
End If
Next
Return False
Çıktı
Durum 1:
hoşgeldiniz: C:\Files\myfile.doc
listOfString: C:\Files\, C:\Files2\
Sonuç: Doğru
Durum 2:
hoşgeldiniz: C:\Files3\myfile.doc
listOfString: C:\Files\, C:\Files2\
Sonuç: Yanlış
Listede herhangi bir zamanda (listOfStrings) çeşitli öğeler (en az 20) içerebilir ve dizeleri binlerce (hoşgeldiniz gibi) karşı incelenmelidir.
(Daha fazla) daha verimli bir şekilde bu kodu yazan mı var?
CEVAP
SERİ, ve C# (çok bugünlerde VB bilmiyorum):
bool b = listOfStrings.Any(s=>myString.Contains(s));
ya da (daha kısa ve daha verimli, ama daha az tartışmalı net):
bool b = listOfStrings.Any(myString.Contains);
Eğer test eşitlik olsaydı, değer HashSet
vb bakıyor olurdu, ama bu kısmi parçalara böldükten ve karmaşık bir düzen eklemek sürece maçlar ile yardımcı olmayacaktır.
< / ^ hr .
güncelleme: Eğer gerçekten "StartsWith", daha sonra sıralama listesi ve yerin içine bir dizi ; daha sonra kullanmak Array.BinarySearch
bulmak her madde kontrolü arama için bakın Eğer bir tam veya kısmi eşleşme.
Eğer bir dize geçerli bir adres olup o...
Eğer bir dize geçerli bir sayı olup ol...
Neden eğer sözlük anahtarı varsa kontr...
Eğer bir dize PHP JSON olup olmadığını...
Nasıl eğer URL bir dize içeriyorsa kon...