1. ホーム
  2. c#

[解決済み] 大文字・小文字を区別しないリスト検索

2022-04-20 16:46:37

質問

リストがあります testList には、たくさんの文字列が含まれています。に新しい文字列を追加したい。 testList は、そのリストにまだ存在しない場合のみです。したがって、リストの大文字小文字を区別しない検索を行い、効率的に行う必要があります。私は Contains というのも、これではケーシングが考慮されないからです。また ToUpper/ToLower パフォーマンス上の理由からです。この方法に出会いましたが、これはうまくいきます。

    if(testList.FindAll(x => x.IndexOf(keyword, 
                       StringComparison.OrdinalIgnoreCase) >= 0).Count > 0)
       Console.WriteLine("Found in list");

これは機能しますが、部分的な単語にもマッチします。リストに "goat" が含まれている場合、"oat" がすでにリストに含まれていると主張するので、私は "oat" を追加することができません。大文字と小文字を区別せずに効率的にリストを検索する方法はないでしょうか。

解決方法は?

String.IndexOfの代わりに 文字列.Equals を使用すると、部分一致が発生しないようにすることができます。また、FindAllはすべての要素を通過してしまうので使わないでください。 FindIndex (最初にヒットしたもので停止します)。

if(testList.FindIndex(x => x.Equals(keyword,  
    StringComparison.OrdinalIgnoreCase) ) != -1) 
    Console.WriteLine("Found in list"); 

代わりに、LINQのメソッドを使うこともできます(これも最初にヒットしたメソッドで停止します)。

if( testList.Any( s => s.Equals(keyword, StringComparison.OrdinalIgnoreCase) ) )
    Console.WriteLine("found in list");