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

  • Baby Big Mouth

    Baby Big Mou

    5 Mart 2013
  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008