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

  • Myron and Nejusha dance

    Myron and Ne

    2 AĞUSTOS 2012
  • New Scientist

    New Scientis

    27 Kasım 2006
  • sonia989

    sonia989

    26 EKİM 2006