回答:
すでに組み込まれているContains()メソッドを使用するだけです。
using System.Linq;
//...
string[] array = { "foo", "bar" };
if (array.Contains("foo")) {
//...
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.Contains(foo)
私はこれが古いことを知っていますが、ジェネリックと拡張メソッドを使用してこれを行う新しいメソッドがあることを新しいリーダーに知らせたいと思いました。
これを行う方法の詳細については、私のブログ投稿を参照してください。ただし、主な考え方は次のとおりです。
この拡張メソッドをコードに追加することにより:
public static bool IsIn<T>(this T source, params T[] values)
{
return values.Contains(source);
}
次のように検索を実行できます。
string myStr = "str3";
bool found = myStr.IsIn("str1", "str2", "str3", "str4");
(適切なequalsメソッドを作成する限り)どのタイプでも機能します。確かに任意の値タイプ。
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
ことをしたいのは、最初の列のwhoデータテーブルを調べて、値が次の文字列のいずれでも終わらないかどうかを確認することです。それらが終わらない場合は、そのことを示す文字列を返します.00
たとえば、例を使用して値が欠落しているこれを機能させることができないようです。ブール値を返したくないので少しトリッキーです。文字列を返すようにメソッドを変更しましたが、それでも提案は機能しません
public static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Linq(s&gの場合):
var test = "This is the string I'm looking for";
var found = strArray.Any(x=>x == test);
または、要件に応じて
var found = strArray.Any(
x=>x.Equals(test, StringComparison.OrdinalIgnoreCase));
配列はソートされていますか?もしそうなら、バイナリ検索を行うことができます。これも.NET実装です。 配列がソートされている場合、バイナリ検索は、反復的なソリューションよりもパフォーマンスを向上させます。
一般に、配列は、特定のオブジェクトがコレクション内にあるかどうかを確認したい場合に使用するには不十分なデータ構造です。
この検索を頻繁に実行する場合Dictionary<string, something>
は、配列ではなく検索を使用する価値があります。ディクショナリのルックアップはO(1)(定数時間)ですが、配列の検索はO(N)(配列の長さに比例して時間がかかります)です。
配列がせいぜい200アイテムである場合でも、これらの検索を多数実行すると、Dictionaryはおそらく高速になります。
LINQを使用して配列を反復処理することもできます。または、デリゲートを検索するFindメソッドを使用できます。ただし、findメソッドはループするよりも少しコストがかかると思います。
これは、アレイを手動で反復するよりも高速です。
static bool isStringInArray(string[] strArray, string key)
{
if (strArray.Contains(key))
return true;
return false;
}
Linqを使用したくない、または単に使用できない場合は、static Array.Exists(...);
関数を使用することもできます。
https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
var arr = new string[]{"bird","foo","cat","dog"};
var catInside = Array.Exists(
arr, // your Array
(s)=>{ return s == "cat"; } // the Predicate
);
Predicateがtrueを返すと、catInsideもtrueになります。