SORU
1 ŞUBAT 2009, Pazar


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
1 ŞUBAT 2009, Pazar


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hanksranger

    hanksranger

    6 EKİM 2009
  • RaquelGamesBR

    RaquelGamesB

    20 HAZİRAN 2009
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009