循环通过2个数组来比较值c#

Joh*_*ohn 0 c# asp.net arrays

我环顾四周,找不到这个问题的具体答案.我有两个数组,一个包含一个人列表,另一个包含一个带有name属性的Person对象.我试图遍历对象数组,如果人的.Name中的值等于字符串数组中的对应值,那么我将1添加到计数器.我已经看到了使用Linq给出的答案,但我对此并不熟悉.有没有一个基本的方法来做到这一点,我忽略或我需要使用Linq.提前致谢.这是我的代码.

int count = 0;

string[] names = new string[]{"John","Jim","Mary","Joan","Tim"};

ObservableCollection<Person> people = (ObservableCollection<Person>)Session["People"];

foreach (var pe in people)
{
    for (int i = 0; i < names.Length; i++)
    {
        if (pe.Name == names[i])
            count++;
    }    
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 5

你应该HashSet<string>用来存储names.它具有O(1) Contains方法,当相同的Contains方法string[]O(n)时.

var set = new HashSet<string>(names);
Run Code Online (Sandbox Code Playgroud)

然后

foreach (var pe in people)
{
    if(set.Contains(pe.Name))
        count++;  
}
Run Code Online (Sandbox Code Playgroud)

或者使用LINQ

count = people.Count(person => set.Contains(person.Name));
Run Code Online (Sandbox Code Playgroud)

它将使您的解决方案O(m)而不是O(n*m)