我有一个ObservableCollection<myClass>
列表。它包含MyClass
类型的10个对象。ArrayList C#包含方法查询
class MyClass
{
string name;
int age;
}
如果我想找到列表,age = 10
的所有项目,我可以使用Contains
方法? 如果是,我怎么能不使用迭代来做到这一点?
我有一个ObservableCollection<myClass>
列表。它包含MyClass
类型的10个对象。ArrayList C#包含方法查询
class MyClass
{
string name;
int age;
}
如果我想找到列表,age = 10
的所有项目,我可以使用Contains
方法? 如果是,我怎么能不使用迭代来做到这一点?
var age10 = list.Where(i => i.age == 10);
地段多个查询这里:http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx
请注意,虽然这是一个很好的解决方案,但它在幕后使用迭代。这对于10个对象来说没有问题,但如果在较大的集合上过度使用,则可能会很慢,因此请注意。 – 2010-10-19 12:44:17
实际上,如果迭代的时间成本比处理循环中每个值的时间成本更重要,那么迭代器会很慢,*和*集合很大(高达数百)。如果是这样的话,你可能会想重新考虑一下你选择的数据结构:一个排序好的本地数组,一棵树或者一个列表字典会更好,因为它们是O(log N), O(log N)和O(1)分别进行搜索 - 而不是使用未分类的ObservableCollection得到的O(N)。 – 2010-10-19 23:52:25
没有,Contains
只查找特定的值,不是匹配谓语。它也只发现一个值而不是每个匹配值。
你可以,但是,使用Where
从LINQ到对象,假设你在.NET 3.5或更高版本:
foreach (var item in list.Where(x => x.Age == 10))
{
// Do something with item
}
由于ObservableCollection<T>
工具Collection<T>
它实现IEnumerable<T>
......你可以使用LINQ到对象扩展方法,使这个简单的(即使它会在后台使用迭代):
var results = list.Where(m => m.age == 10);
您可以使用LINQ来做到这一点,但不是Contains
var foo = from bar in myCollection where bar.age == 10 select bar;
正如其他人所说,使用.Where(i => i.Age == 10)
将是获得问题中所述结果的正确方法。您可以使用.Contains()
来检查您的馆藏是否有特定的班级实例。
你的问题是关于ObservableCollection的,但你的标题是关于ArrayList的。请修改以保持一致。 – 2010-10-19 12:36:13