1

特定の単語を検索する効率的な方法を探しています。switch/case、int / string.IndexOf('!');を使用しますか?foreachループ/含む?

クライアントから受信している文字列があります。だから、私が得るとしましょう:

string x = "fjdswordslkjf?dkHEYw";

そのメッセージに対応する可能な値の配列があります。(これは構文的に正しくないので、アイデアが得られます):

someArray[0]= "?";
someArray[1]= "HEY";
someArray[2]= "find.me";

基本的に知りたい

 if (x contains someWordinSomeArray)

配列内の単語を使用して、文字列xを検索したいと思います。C#でこれを行うための最も効率的な方法は何でしょうか?文字列内の正確な位置ではなく、ブール応答が必要です。

答え

これが私が使ったものです:

foreach (string searchstring in valuesArray)
        {
            indx = test.IndexOf(searchstring);
            if (indx > -1)
            {
                testValue = true;
                break;
            }             
        }
4

4 に答える 4

2

配列をループし、一致するものが見つかったらすぐに終了します。

bool found = someArray.Any(s => x.Contains(s));

同じものの非 LINQ バージョンは次のようになります。

bool found = false;
foreach (string s in someArray) {
  if (x.Contains(s)) {
    found = true;
    break; // exit from loop
  }
}
于 2011-12-18T22:14:17.727 に答える
1

必要に応じて、適切な拡張メソッドを使用できます。入力文字列が に格納されておりs、チェックする単語の配列が であるとしますwordsToMatch。それで:

...単語のいずれかが一致するかどうかを知りたい場合:

var stringMatched = wordsToMatch.Any(w => s.Contains(w));
// true or false

...どの単語が一致するか知りたい場合:

var matchingWords = wordsToMatch.Where(w => s.Contains(w));
// ["apple", "ban", "banana", "nana", "coconut", "nut", ...]

...各単語が一致するかどうかを知りたい場合:

var wordMatchResult = wordsToMatch.Select(w => s.Contains(w));
// [true, true, false, true, false, true, ...]
于 2011-12-18T22:19:01.517 に答える
0

.NET フレームワークには、やりたいことを実行する string.contains メソッドがあります。配列をループします。配列内の各項目について、x.Contains(item) が true かどうかを確認します

http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx

string s1 = "fjdswordslkjf?dkHEYw";
foreach (String s in array)
    b = s1.Contains(Array[item]);  //will be T or F
于 2011-12-18T22:14:14.227 に答える
0
    bool CheckForString(string[] someArray,string x)
    {          
      foreach(string s in someArray)
        if(x.contains(s))
          return true;
      return false;
    }  

「含む」はindexOf()よりも速いと思います

于 2011-12-18T22:45:10.737 に答える