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

Posted

技术标签:

【中文标题】检查字符串数组是不是包含值,如果是,则获取其位置【英文标题】:Checking if a string array contains a value, and if so, getting its position检查字符串数组是否包含值,如果是,则获取其位置 【发布时间】:2011-12-13 14:53:51 【问题描述】:

我有这个字符串数组:

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

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

我不想使用循环。谁能建议我如何做到这一点?

【问题讨论】:

【参考方案1】:

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

【讨论】:

...而且我已经使用 foreach 几个月了。顺便说一句,这在计算上比 BLUEPIXY 的答案快吗?还是更慢? Array.IndexOf 关心大小写吗? "text1" == "TEXT1" Array.IndexOf 仅当索引为 0 有界时才返回 −1。这种情况会破裂,所以要注意! var a = Array.CreateInstance(typeof(int),new int[] 2 , new int[] 1 ); a.SetValue(1, 1); Console.WriteLine(Array.IndexOf(a, 26)); // 0 如果您正在寻找完全匹配,这很有用。但是,如果您不关心大小写,这可能会很有用:How to add a case-insensitive option to Array.IndexOf【参考方案2】:
var index = Array.FindIndex(stringArray, x => x == value)

【讨论】:

这应该是公认的答案,因为它允许传入一个 lambda 来执行更复杂的事情,例如 Array.FindIndex(array, x => x.StartsWith("insert string here")) 但这不是问题所要求的。问题询问如何从数组中找到已知值。 @KarlGjertsen 我想定位它在数组中的位置 不过这非常有用,能够执行 x.ToUpper() 之类的操作对我来说非常有益。【参考方案3】:

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

【讨论】:

简洁明了的回答 如何检查单个值?当我尝试检查 char 数组是否有 char 时,我收到一条消息,指出 char 无法转换为 System.Predicate<char> Array.Exists(array, element => element.Equals("perl", StringComparison.OrdinalIgnoreCase) 如果你关心大写。【参考方案4】:

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

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

    ...

(这类似于根据 Darin 的回答调用 Array.IndexOf - 只是另一种方法。我不清楚为什么 IList&lt;T&gt;.IndexOf 在数组中显式实现,但没关系...... )

【讨论】:

如何使用 Contains 找到数组中世界的位置? 是否有可能检查字符串数组 A 中的字符串项是否存在于另一个字符串数组 B 中? @MuraliMurugesan:不清楚你在问什么——这两个数组是否有 any 项共同点?一个特定项? (在后一种情况下,它也在数组中这一事实是无关紧要的。) 我试图在这里回答 ***.com/a/22812525/1559213 。我开始为 html.CheckBox 行返回真/假。实际上有一个月份数组,也有几个月的模型。如果月份数组中存在模型月份,我们需要返回 true。感谢火箭回复:) @MuraliMurugesan:听起来像if (months.Contains(model.Month))【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

IMO 检查数组是否包含给定值的最佳方法是使用System.Collections.Generic.IList&lt;T&gt;.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&lt;T&gt; 的几个方法,比如 Count 和 Contains。因为它是显式(私有)实现,所以如果不先转换数组,您将无法使用这些方法。这不仅适用于字符串 - 您可以使用此技巧检查任何类型的数组是否包含任何元素,只要元素的类实现 IComparable。

请记住,并非所有IList&lt;T&gt; 方法都以这种方式工作。尝试在数组上使用IList&lt;T&gt; 的 Add 方法会失败。

【讨论】:

您的答案与 Priyank 的答案基本相同。它没有给出 OP 所要求的元素的索引。 @reggaeguitar 同意你的观点! 这是一直在寻找的解决方案,尽管它并没有完全回答问题。【参考方案8】:

使用 System.Linq

stringArray.Contains(value3);

【讨论】:

【参考方案9】:

你可以试试这个,它查找包含该元素的索引,并将索引号设置为 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");
            

【讨论】:

【参考方案10】:
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); 


【讨论】:

【参考方案11】:

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

   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

【讨论】:

OP 要求的 position 在哪里?【参考方案12】:
string[] strArray =  "text1", "text2", "text3", "text4" ;
string value = "text3";

if(Array.contains(strArray , value))

    // Do something if the value is available in Array.

【讨论】:

它给出错误:'System.Array' 不包含'contains' 的定义。【参考方案13】:

最简单和更短的方法如下。

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

if(stringArray.Contains(value))

    // Do something if the value is available in Array.

【讨论】:

问题是关于在数组中查找项目的位置......使用Contains 方法,您没有此信息

以上是关于检查字符串数组是不是包含值,如果是,则获取其位置的主要内容,如果未能解决你的问题,请参考以下文章

检查 JSON 数组中是不是存在值,如果不存在则检查下一个数组(Swift / SwiftUI)

检查值是不是在数组中(C#)

js 判断数组中是不是包含

php 中 判断数组中是不是有值

如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]

PHP如何检查一个数组内是不是存在指定元素