我有List<IAgStkObject>
。每个IAgStkObject
都有一个名为InstanceName
的属性。如何搜索我的列表以查找是否有任何包含的IAgStkObject具有特定的InstanceName?在过去,我会使用foreach循环......但这似乎太慢了。
WulfgarPro
答案 0 :(得分:4)
如果你唯一拥有的是List(不是由InstanceName命令),那么就没有更快的方法了(如果经常进行类似的测试,你可以预处理数据并创建例如由InstanceName索引的Dictionary)。
与“过去”不同的唯一方法是那些有用的扩展方法,允许你只写
return myList.Any(item => item.InstanceName == "Searched name");
答案 1 :(得分:2)
如果列表按InstanceName排序,则可以使用二进制搜索算法,否则:否。
您必须使用一些更高级的数据结构(如排序列表或字典)。我认为字典可以解决这个问题。它非常快速且易于使用。
但是想想:你有多少物品?您是否确定循环通过它们是性能问题?如果你有&lt; 1000个对象,你绝对不必担心(除非你想要实时做某事)。
答案 2 :(得分:2)
您可以使用Linq:
list.Any(o => o.InstanceName == "something")
但是你无法避免在列表中循环(在Linq案例中它是隐式完成的)。如果您希望获得性能提升,请更改数据结构。也许字典(InstanceName - &gt; IAgStkObject
)是合适的吗?