【发布时间】:2014-04-06 22:24:30
【问题描述】:
我创建了一个代码来处理从一台服务器到另一台服务器的数据,它每隔几分钟就会执行一次。所以,它必须更快。在该过程中有一个包含 1000 多条记录的列表。记录为字符串格式。我想用字符串的给定部分过滤这些记录。所有匹配的记录都应该被过滤并存储在另一个列表中。
例如:我在列表中有一些记录。
Table1_Field1
Table1_Field2
Table1_Field3
Table2_Field4
Table2_Field4
Table2_Field4
假设如果我想获取包含字符串部分“Table1”的所有记录,那么结果应该是这样的。
Table1_Field1
Table1_Field2
Table1_Field3
我知道这可以通过使用 LINQ 来完成。但是,我使用的是 Visual Studio 2005 .Net Framework 2.0。 我也可以通过 DataTable.Select() 做到这一点,但这很耗时。任何耗时超过 50 毫秒的方法都会导致我的应用程序出现问题。所以,它必须更快。我无法使用带有通配符“*”的简单循环过滤记录。
请建议我如何在最短的时间内做到这一点。
【问题讨论】:
-
什么样的列表?
List<T>的东西?你想过滤数据源? 1000 条字符串记录应该可以在 50 毫秒内轻松过滤。至于不能循环做,不管你选择什么方法,它都会循环。 LINQ 是一种快捷方式,但您最终仍将迭代/枚举每条记录。如果您正在谈论然后显示过滤的记录,那么这可能是耗时的。不管怎样,我认为我们需要更多信息。 -
@EliGassert 我很困惑使用列表对象。我应该使用字符串数组还是使用 List
或任何其他集合对象。我的问题是哪种方法最适合在最短的时间内获得过滤记录。数据类型是一个字符串列表。 -
我可以在数组中使用 BinarySearch 吗?
-
如果您的数据未排序,那么您的操作将受到限制。如果您的通配符总是在开头,即
StartsWith,那么您可能可以稍微优化搜索。但是,老实说,List<string>中的 1000 个数据项应该非常快。您可以创建一个搜索/通配符正则表达式,然后迭代您的循环并将匹配的结果存储在新的List<string>中。我想它会很快。 -
我的数据已经按升序排序了。