如何仅为匹配的字符串清理List?

时间:2012-12-18 10:15:26

标签: c# listbox data-scrubbing

我正在尝试创建一个例程,该例程从textBox中获取List,然后使用另一个List擦除它。只保留具有匹配文本的字符串。我不认为我可以使用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));

我在这里做错了什么?

4 个答案:

答案 0 :(得分:3)

一种有效而简短的方法是使用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)));

答案 1 :(得分:3)

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();

答案 2 :(得分:2)

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

答案 3 :(得分:0)

我手头没有代码,但您可以将每个list转换为datatable,然后使用联接。这应该在初始列表被清除时产生。

相关问题