1. ホーム
  2. c#

[解決済み] 文字列がリスト(文字列)の要素を含むかどうかをチェックする

2022-04-16 06:32:29

質問

次のブロックのコードについて。

For I = 0 To listOfStrings.Count - 1
    If myString.Contains(lstOfStrings.Item(I)) Then
        Return True
    End If
Next
Return False

と出力されます。

ケース1

myString: C:\Files\myfile.doc
listOfString: C:\Files\, C:\Files2\
Result: True

ケース2

myString: C:\Files3\myfile.doc
listOfString: C:\Files\, C:\Files2\
Result: False

リスト (listOfStrings) はいくつかの項目 (最低 20) を含み、何千もの文字列 (myString など) と照合する必要があります。

このコードを書くのにもっと良い(効率的な)方法はありますか?

どのように解決するのですか?

LINQで、C#を使っています(最近はVBをあまり知りません)。

bool b = listOfStrings.Any(s=>myString.Contains(s));

または(より短く、より効率的ですが、間違いなく、より明確ではありません)。

bool b = listOfStrings.Any(myString.Contains);

もし、等質性をテストするのであれば、次のように見ておくとよいでしょう。 HashSet などがありますが、これでは部分一致の場合、フラグメントに分割して複雑な順序を追加しない限り、役に立ちません。


update: もし本当に "StartsWith" を意味するのであれば、リストをソートして配列に格納し、それから Array.BinarySearch で各項目を検索し、完全一致か部分一致かをルックアップでチェックします。