【问题标题】:How do you scrub a List for only matching strings?您如何清理列表以仅匹配字符串?
【发布时间】:2023-04-03 10:16:02
【问题描述】:

我正在尝试创建一个例程,该例程从文本框中获取一个列表,然后使用另一个列表对其进行清理。仅保留具有匹配文本的字符串。我认为我不能使用 RegEx,因为我不知道清理列表将包含哪些内容。比赛不一定是绝对的。例如:

'ant' from my scrub list would match 'antiques', 'manta', 'ants', etc.

我认为我使用以下代码走在正确的轨道上,但我在最后两行代码下都出现了红色波浪线。任何帮助表示赞赏:

List<string> masterList = new List<string>(textBox_masterList.Text.Split(','));    
List<string> scrubList = new List<string>(textBox_scrubList.Text.Split(','));
for (int i = 0; i < masterList.Count; i++)
    masterList = masterList.Where(x => x.Contains(scrubList));

    masterList = masterList.RemoveAll(x => x.!Contains(scrubList));

我在这里做错了什么?

【问题讨论】:

  • masterList.Intersect(scrubList); 怎么样?

标签: c# listbox data-scrubbing


【解决方案1】:
List<string> masterList = new List<string>(textBox_masterList.Text.Split(','));
List<string> scrubList = new List<string>(textBox_scrubList.Text.Split(','));
masterList = masterList.Where(x => scrubList.Any(s => x.Contains(s)))
                       .ToList();

使搜索不区分大小写:

masterList = masterList.Where(x => scrubList.Any(s => 
                          Regex.IsMatch(x, s, RegexOptions.IgnoreCase)))
                       .ToList();

【讨论】:

  • 这似乎有效,但它正在查看案例。有什么办法可以忽略大小写?
  • @Jeagr 查看更新 - 您可以使用 System.Text.RegularExpressions.Regex
【解决方案2】:

一种有效而简短的方法是使用Enumerable.Except

masterList = masterList.Except(scrubList).ToList();

如果您想使用不需要创建临时列表的RemoveAll

masterList.RemoveAll(str => scrubList.Contains(str));

由于您要删除 scrubList 中的所有字符串。

编辑:使其不区分大小写:

masterList.RemoveAll(str => scrubList.Any(s => s.Equals(str, StringComparison.OrdinalIgnoreCase)));

【讨论】:

  • 不,这不会检查子字符串
  • @lazyberezovsky:不清楚 OP 在包含“禁止”字符串时也想删除字符串,是吗?
  • 嗯,他提到匹配不一定是绝对的,所以我认为简单的除外,反正这里不适合..
  • 有什么办法可以忽略大小写?
  • 再次感谢蒂姆。非常简洁的答案。我喜欢简短。
【解决方案3】:

for语句没用,你不要使用变量i。

【讨论】:

    【解决方案4】:

    我手头没有代码,但您可以将每个list 转换为datatable,然后使用连接。这应该会导致初始列表被清理掉。

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 2015-08-18
      • 2019-05-13
      • 1970-01-01
      • 2023-01-06
      相关资源
      最近更新 更多