C#如何检查字符串是否包含字符串数组中的任何元素?

时间:2011-11-07 20:53:04

标签: c# arrays string search

我正在尝试实现一个简单的搜索功能。我有一个字符串数组,其中包含从用户输入的所有单词以进行搜索。我有另一个字符串,其中包含用户名,内容等数据...所以我要做的是检查名称是否包含搜索或字符串数​​组中的任何元素。现在我有一个循环,它一次检查一个单词并在IEnumerable中连接结果。

有没有人知道更快的搜索方式?像String.ContainsAny(Search [])

由于

5 个答案:

答案 0 :(得分:8)

试试这个......

Search.Any(p => name.Contains(p))

答案 1 :(得分:2)

using System.Linq;

string[] searchItems = ...
string input = "This is the input text";

// Check whether at least one match found
bool matchFound = input.Any(w => input.Contains(w));

// Count all matches
int matchesCount = input.Where(w => input.Contains(w))
                        .Count();

答案 2 :(得分:1)

string[] searchItems = ...;
string[] userNames = ...;

var matches = userNames.Intersect(searchItems);

您可以找到有关交叉方法here

的更多信息

答案 3 :(得分:1)

你可以这样做......

return array.Any(s => s.Equals(myString))

或尝试这样....

 string stringToCheck = "text1";
        string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
        foreach (string x in stringArray)
        {
            if (x.Contains(stringToCheck))
            {
                // Process...
            }

        }

或类似的东西

string stringToCheck = "text1text2text3";
string[] stringArray = new string[] { "text1" };
if (Array.Exists<string>(stringArray, (Predicate<string>)delegate(string s) { 
    return stringToCheck.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1; })) {
    Console.WriteLine("Found!");
}

答案 4 :(得分:0)

例如,针对此问题的两种解决方案:

  1. 解决方案1 ​​

    private void findDateColumn()   {
            string stringToCheck = "date";
            int stringToCheckIndex = -1;
            string elementInArray = "Not Defined or Not Found";
            if (Array.Exists<string> (headers, (Predicate<string>) delegate (string s)
            {
            stringToCheckIndex = s.IndexOf (stringToCheck,StringComparison.OrdinalIgnoreCase);
            elementInArray = s;
            return stringToCheckIndex > -1;
            }))
            {
            dateColTitle.Text = elementInArray; //a textbox to show the output
            }
    }
    
  2. 解决方案2

我正在使用@Lev答案,它看起来更简单,更短,而且给出了相同的结果:

    private void setDateColumnTitle ()
{

dateColTitle.Text = "Not Defined or Not Found";

var match = headers.FirstOrDefault(c => c.IndexOf("date", StringComparison.OrdinalIgnoreCase) > -1);

if (match!=null)                
    dateColTitle.Text = match;               
}