我环顾四周,找不到这个问题的具体答案.我有两个数组,一个包含一个人列表,另一个包含一个带有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)
你应该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)
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |