配列内の文字列の一部を探しますか?

私は特定の単語を探すための効率的な方法を探しています、私は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;
            }             
        }
1
someArray の単語の any x にあるかどうか、 >は someArray の単語のうち x にありますか?
追加された 著者 John Feminella,
find.me を1つまたは2つのクラスとしてクラスしますか?
追加された 著者 Ash Burlaczenko,

4 答え

配列をループし、一致するとすぐに終了します。

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
  }
}
2
追加された
@thermacore:それはあなたの質問通りにクライアントから得られる文字列です。
追加された 著者 Guffa,
xはどこから来ますか?
追加された 著者 thermacore,

必要に応じて、適切な拡張方法を使用することができます。入力文字列が 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, ...]
1
追加された
+1 /場所/選択のための最も簡単なサンプルの+1
追加された 著者 Surjit Samra,

.NET Frameworkには、あなたがやりたいことをする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
0
追加された
    bool CheckForString(string[] someArray,string x)
    {          
      foreach(string s in someArray)
        if(x.contains(s))
          return true;
      return false;
    }  

私は "contains"がindexOf()より速いと思う

0
追加された