在C#中搜索列表以获取索引值

3

我有一个字符串列表,其中的数据用逗号分隔。我另外有一个关键字字符串列表,想在第一个列表中搜索。我希望返回第一个列表中所有不包含第二个列表中任何关键字的元素的索引。例如:

List 1:
Student,101256,Active
Professor,597856,Active
Professor,697843,Inactive
Student,329741,Active
Student,135679,Inactive
Student,241786,Inactive

List 2:
697843
241786

我需要查询List 1中所有不包含List 2中任何元素的元素的索引。因此,返回的索引列表应该是0、1、3、4。有没有什么方法可以实现这个?

提前感谢!

编辑:这是我的尝试:

List<int> index = list1
        .Select((s, i) => new { s, i })
        .Where(e => !list2.Contains(e.s))
        .Select(e => e.i).ToList();

有几种方法可以做到这一点,你已经尝试过什么了吗? 第一步应该是将信息转换为更易管理的格式,必须在逗号上进行字符串拆分才能做任何事情,这将是一场噩梦! - jimplode
我尝试了上面从论坛另一个帖子中得到的方法,但对我不起作用。 - Holly
@Holly 这个网站不是一个论坛,而是一个问答平台,请查看此链接以获取更多信息。http://stackoverflow.com/about - BrunoLM
你有什么其他的建议? - Holly
1个回答

1

你需要引用System.Linq,现在它已经被编辑以包括!Student过滤器

var list1 = new List<string> {
  {"Student,101256,Active"},
  {"Professor,597856,Active"}, 
  {"Professor,697843,Inactive"}, 
  {"Student,329741,Active"},
  {"Student,135679,Inactive"},
  {"Student,241786,Inactive"}
};
var list2 = new List<string> {{"697843"}, {"241786"}};

var result = list1
             .Select((item,i)=> new {index=i,value=item})
             .Where(item => !item.value.StartsWith("Student"))
             .Where(item => !item.value.Split(',').Any(j => list2.Contains(j)))
             .Select(item=>item.index)
             .ToList();

第一个选择在过滤之前提取索引,预编辑版本计算了过滤后的索引,因此不正确。

非常好,你上面的方法完美地解决了问题!我只是想知道,有没有办法微调查询,以包括不应以“student”开头的条件列表1? - Holly
list1.Where(oneItem=> !oneItem.StartsWith("Student")).Where(... 等等,继续像他发布的那样。可以链接尽可能多的过滤方法。 - ANeves
我尝试了ANeeves建议的方法,但不知何故,一旦我尝试第二个where语句,它就不再起作用了。 - Holly
这个实际上对我不起作用。之前我得到了一个错误的读数。你能推荐一些修复方法吗? - Holly
@Bob Vale,你能提供一个替代方案吗? - Holly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接