【问题标题】:How to filter items from list using wildcard character?如何使用通配符从列表中过滤项目?
【发布时间】: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> 中。我想它会很快。
  • 我的数据已经按升序排序了。

标签: c# list filtering


【解决方案1】:

假设我们有一个列表,您只想要包含字符串部分“Table1”的记录。

下面的代码将返回一个带有结果的列表:

List<string> myList = new List<string>();

myList.Add("Table1_Field1");
myList.Add("Table1_Field2");
myList.Add("Table1_Field3");
myList.Add("Table2_Field4");
myList.Add("Table2_Field4");
myList.Add("Table2_Field4");

List<string> resultList = myList.FindAll(MyFunc);


private static bool MyFunc(string s)
{

    // AndAlso prevents evaluation of the second Boolean
    // expression if the string is so short that an error
    // would occur.
    if (s.Contains("Table1")) {
        return true;
    } else {
        return false;
    }
}

【讨论】:

  • 正是我想要的。谢谢
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 2011-10-25
  • 2015-06-04
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多