私はこの文字列配列を持っています:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
stringArray
にvalue
が含まれているかどうかを確認します。もしそうなら、私は配列内の位置を見つけたいと思います。
私はループを使いたくありません。誰かが私がこれを行う方法を提案することはできますか?
あなたは Array.IndexOf メソッドを使うことができます:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
int pos = Array.IndexOf(stringArray, value);
if (pos > -1)
{
// the array contains the string and the pos variable
// will have its position in the array
}
var index = Array.FindIndex(stringArray, x => x == value)
Exists
を使うこともできます。
string[] array = { "cat", "dog", "Perl" };
// Use Array.Exists in different ways.
bool a = Array.Exists(array, element => element == "Perl");
bool c = Array.Exists(array, element => element.StartsWith("d"));
bool d = Array.Exists(array, element => element.StartsWith("x"));
編集:私はあなたが同様にポジションが必要であることに気づいていませんでした。明示的に実装されているため、配列型の値に直接IndexOf
を使用することはできません。しかし、あなたは使用することができます:
IList<string> arrayAsList = (IList<string>) stringArray;
int index = arrayAsList.IndexOf(value);
if (index != -1)
{
...
}
(これはDarinの答えとして Array.IndexOf
を呼び出すのと似ていますが、単なる代替アプローチです。 IList<T>.IndexOf
が配列で明示的に実装されていますが、気にしないでください...)
あなたはArray.IndexOf()
を使うことができます - 要素が見つからなかったなら、それは-1を返すことに注意してください、そして、あなたはこのケースを処理しなければなりません。
int index = Array.IndexOf(stringArray, value);
あなたはこのように試すことができます...あなたが位置も知りたいならば、あなたはArray.IndexOf()を使うことができます
string [] arr = {"One","Two","Three"};
var target = "One";
var results = Array.FindAll(arr, s => s.Equals(target));
IMOが配列に与えられた値が含まれているかどうかをチェックする最良の方法は次のようにSystem.Collections.Generic.IList<T>.Contains(T item)
メソッドを使うことです:
((IList<string>)stringArray).Contains(value)
完全なコードサンプル:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if (((IList<string>)stringArray).Contains(value)) Console.WriteLine("The array contains "+value);
else Console.WriteLine("The given string was not found in array.");
T[]
配列は、CountやContainsなど、いくつかのList<T>
のメソッドを個人的に実装しています。これは明示的な(プライベートな)実装なので、最初に配列をキャストしないとこれらのメソッドを使用することはできません。これは文字列に対してのみ機能するわけではありません - 要素のクラスがIComparableを実装している限り、このトリックを使用して任意の型の配列に要素が含まれているかどうかをチェックできます。
すべてのIList<T>
メソッドがこのように機能するわけではないことに留意してください。配列に対してIList<T>
のAddメソッドを使用しようとすると失敗します。
これを試すことができます。この要素を含むインデックスを検索し、インデックス番号をintに設定します。そして、intが-1より大きいかどうかをチェックします。インデックス - 配列は0から始まる.
string[] Selection = {"First", "Second", "Third", "Fourth"};
string Valid = "Third"; // You can change this to a Console.ReadLine() to
//use user input
int temp = Array.IndexOf(Selection, Valid); // it gets the index of 'Valid',
// in our case it's "Third"
if (temp > -1)
Console.WriteLine("Valid selection");
}
else
{
Console.WriteLine("Not a valid selection");
}
string x ="Hi ,World";
string y = x;
char[] whitespace = new char[]{ ' ',\t'};
string[] fooArray = y.Split(whitespace); // now you have an array of 3 strings
y = String.Join(" ", fooArray);
string[] target = { "Hi", "World", "VW_Slep" };
for (int i = 0; i < target.Length; i++)
{
string v = target[i];
string results = Array.Find(fooArray, element => element.StartsWith(v, StringComparison.Ordinal));
//
if (results != null)
{ MessageBox.Show(results); }
}
再利用のための拡張メソッドを作成しました。
public static bool InArray(this string str, string[] values)
{
if (Array.IndexOf(values, str) > -1)
return true;
return false;
}
それを呼び出す方法:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if(value.InArray(stringArray))
{
//do something
}