C# 列表和数组比较

C# 列表和数组比较,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有一个要求,在Viewbag.Keyword中有一个值,比如“Johnson and Jen”,所以我必须拆分这个值,并将其与列表进行比较 我尝试了下面的代码,但在某种程度上遇到了错误(例如,这是char而不是string等等),根据framework4.5中提供的最新功能,它看起来不像是智能编码 var str = Convert.ToString(ViewBag.Keyword); string[] str1 = str.Split(' '); for (int j = 0; j <

我有一个要求,在Viewbag.Keyword中有一个值,比如“Johnson and Jen”,所以我必须拆分这个值,并将其与列表进行比较

我尝试了下面的代码,但在某种程度上遇到了错误(例如,这是char而不是string等等),根据framework4.5中提供的最新功能,它看起来不像是智能编码

var str = Convert.ToString(ViewBag.Keyword);
string[] str1 = str.Split(' ');

for (int j = 0; j < str1.Length;j++)
{
    string str2 = Convert.ToString(str[j]);
    if (result.Document.ContactName.IndexOf(str2, 
        StringComparison.CurrentCultureIgnoreCase) != -1)
var str=Convert.ToString(ViewBag.Keyword);
字符串[]str1=str.Split(“”);
对于(int j=0;j
注意:“ContactName”是字符串。
请提供一些提高性能的最新代码。

下面是使用干净代码执行相同操作的示例代码

var str = Convert.ToString(ViewBag.Keyword);
var possibleNames = str.split(' ');

//to check if any match exists
bool anyMatch = possibleNames.Any(n => n.Equals(result.Document.ContactName, StringComparison.InvariantCultureIgnoreCase));

//get matched names
var matchedNames = possibleNames.Where(n => n.Equals(result.Document.ContactName, StringComparison.InvariantCultureIgnoreCase));

//do whatever you want with matchedNames now
var array = matchedNames.ToArray();
var list = matchedNames.ToList();

您可以使用
linq
检查
result.Document.Name
是否包含数组中的单词

var str = Convert.ToString(ViewBag.Keyword);
string[] str1 = str.Split(' ');
var names = str1.Where(x => (result.Document.ContactName.Contains(x))).ToList();

您可以比较字符串上的名称,如下所示

记住,比较是区分大小写的

示例-

var str = "Johnson and Jen";
string[] str1 = str.Split(' ');
string result = "Jendasdbnoahsdasnd"; // I assume your ContactName result is like this
if (str1.Any(result.Contains)) // This gives true because Jen in the string
{
  //Do Something
}

但是,对于
string result=“jendasdbnoahsdasnd”
来说,由于这种情况,它给出了false。

您可以使用另一个字符串来拆分字符串
“Johnson and Jen”
,即
“和”
,这将准确地为您提供适合于对照联系人姓名进行检查的姓名

您可以检查
Split
功能和

要检查属性是否包含指定的字符串,可以使用
IndexOf
方法-下面给出了一个简单的示例代码段,您可以运行此示例代码段


使用
StringComparison
参数,其值为
StringComparison.OrdinalingOreCase
将执行不区分大小写的搜索如果需要检查通过使用空格将关键字字符串与集合中的contact name属性拆分得到的单词的精确匹配,则可以使用reg我不想那样做

正则表达式的形式为
\b HEWORDGOESHERE\b
,其中
\b
是单词边界分隔符

检查此示例代码段

var keyword = "Johnson and Jen";
var arr = keyword.Split(' ');
var contactName = "Johnson anderson mobile";
for (var i = 0; i < arr.Length; i++)
{
    var pattern = string.Format("\\b{0}\\b", arr[i]);
    if (Regex.IsMatch(contactName, pattern, RegexOptions.IgnoreCase))
    {
        // do something
        Console.WriteLine("contactName contains the word \"" + arr[i] + "\"");
    }
}
var关键字=“约翰逊和詹”;
var arr=关键字.Split(“”);
var contactName=“Johnson anderson mobile”;
对于(变量i=0;i

str[j]不应该是str1[j]?你想比较的列表在哪里?在
str[j]
你肯定是指
str1[j]
。那里不需要
Convert
,因为
str1[j]
已经是一个字符串。你想检查列表中的
Viewbag.Keyword
是否为“Johnson And Jen”如果你想把它们分成2个,我建议你
str.split(新字符串[]{“and”},StringSplitOptions.None);
这样你就得到了“Johnson”和“Jen”。我已经尝试了大多数场景,我需要与集合中的单词完全匹配。当前问题如:这里返回的联系人姓名“Johnson anderson mobile”“Johnson anderson”->“anderson”,因为它与“and”匹配,我不需要,请帮我修复。
var keyword = "Johnson and Jen";
var arr = keyword.Split(new string[] { " and " }, StringSplitOptions.None);
var contactName = "Johnson";
for (var i = 0; i < arr.Length; i++)
{
    if (contactName.IndexOf(arr[i], StringComparison.OrdinalIgnoreCase) >= 0)
    {
        // do something
        Console.WriteLine("contactName contains the string \"" + arr[i] + "\"");
    }
}
var keyword = Convert.ToString(ViewBag.Keyword);
var arr = name.Split(new string[] { " and " }, StringSplitOptions.None);

for (int i = 0; i < arr.Length; i++)
{
    if (result.Document.ContactName.IndexOf(arr[i], StringComparison.OrdinalIgnoreCase) != -1)
    {
        // do something
    }
}
var keyword = "Johnson and Jen";
var arr = keyword.Split(' ');
var contactName = "Johnson anderson mobile";
for (var i = 0; i < arr.Length; i++)
{
    var pattern = string.Format("\\b{0}\\b", arr[i]);
    if (Regex.IsMatch(contactName, pattern, RegexOptions.IgnoreCase))
    {
        // do something
        Console.WriteLine("contactName contains the word \"" + arr[i] + "\"");
    }
}