检查字符串数组是否包含值,如果是,则获取其位置

时间:2011-10-23 16:17:23

标签: c# arrays string

我有这个字符串数组:

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

我想确定stringArray是否包含value。如果是这样,我想找到它在数组中的位置。

我不想使用循环。谁能建议我怎么做?

12 个答案:

答案 0 :(得分:273)

您可以使用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
}

答案 1 :(得分:66)

var index = Array.FindIndex(stringArray, x => x == value)

答案 2 :(得分:21)

我们也可以使用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"));

答案 3 :(得分:11)

编辑:我没有注意到你也需要这个位置。您不能直接在数组类型的值上使用IndexOf,因为它是显式实现的。但是,您可以使用:

IList<string> arrayAsList = (IList<string>) stringArray;
int index = arrayAsList.IndexOf(value);
if (index != -1)
{
    ...
}

(这类似于按照Darin的回答调用Array.IndexOf - 只是一种替代方法。我不清楚为什么IList<T>.IndexOf 在数组中显式实现,但从不介意...)

答案 4 :(得分:5)

你可以使用Array.IndexOf() - 请注意,如果找不到元素,它将返回-1,你必须处理这种情况。

int index = Array.IndexOf(stringArray, value);

答案 5 :(得分:4)

你可以尝试这样......你可以使用Array.IndexOf(),如果你想知道这个位置

       string [] arr = {"One","Two","Three"};
       var target = "One";
       var results = Array.FindAll(arr, s => s.Equals(target));

答案 6 :(得分:3)

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[]数组私有地实现了List<T>的一些方法,例如Count和Contains。因为它是一个显式(私有)实现,所以如果不先抛出数组,您将无法使用这些方法。这不仅适用于字符串 - 您可以使用此技巧检查任何类型的数组是否包含任何元素,只要该元素的类实现IComparable。

请注意,并非所有IList<T>方法都以这种方式运行。尝试在数组上使用IList<T>的Add方法将失败。

答案 7 :(得分:1)

你可以尝试这个,它查找包含这个元素的索引,并将索引号设置为int,然后检查int是否大于-1,所以如果它是0或更多,那么它意味着它找到了这样一个索引 - 因为数组是基于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");
            }

答案 8 :(得分:0)

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); }

}

答案 9 :(得分:0)

我创建了一个可重复使用的扩展方法。

   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
}

答案 10 :(得分:-3)

string[] strArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

if(Array.contains(strArray , value))
{
    // Do something if the value is available in Array.
}

答案 11 :(得分:-4)

最简单,最简短的方法如下:

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

if(stringArray.Contains(value))
{
    // Do something if the value is available in Array.
}