列表和数组比较

时间:2016-08-30 05:07:55

标签: c# asp.net-mvc-4

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

我正在尝试以下代码,但是在某些方面或其他方面遇到错误(例如;这是char而不是字符串等等)并且根据框架4.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)

注意:“ContactName”是字符串。 请帮助一些可以提高性能的最新代码。

5 个答案:

答案 0 :(得分:1)

您可以使用linq来检查result.Document.Name contains来自数组的单词。

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

答案 1 :(得分:1)

您可以将这些名称与下面的字符串进行比较,

  

记住比较是区分大小写的

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

if(str1.Any(result.Document.ContactName.Contains)){
    //Do Something
}

示例 -

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",由于这种情况,它会给出错误。

答案 2 :(得分:0)

以下是使用干净代码

执行相同操作的示例代码
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();

答案 3 :(得分:0)

您可以使用另一个字符串"Johnson and Jen"拆分字符串" and ",这样就可以准确地为您提供适合检查联系人姓名的名称。

您可以查看Split函数herehere

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

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] + "\"");
    }
}

您的方案的代码段如下所示,在您的代码中,您不需要不必要的类型转换,即string str2 = Convert.ToString(str[j]);因为str[j]已经是字符串

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

使用StringComparison参数及其值StringComparison.OrdinalIgnoreCase将执行不区分大小写的搜索

答案 4 :(得分:0)

If you need to check for the exact match of the words you get by splitting the keyword string using a white space against the contact name property from the collection then you can use a regular expression to do that.

The regular expression is of the form \bTheWordGoesHere\b where \b is the word boundary delimiter

Check this sample code snippet.

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] + "\"");
    }
}

rextester link