实现方法判断指定字符串列表的元素是否存在于目标列表中
实现字符串列表元素存在性检查(忽略顺序)
你需要的IsValueInsideTheList方法可以通过两种方式实现——无需手动写循环的LINQ方式,或者手动遍历的循环方式,下面分场景给出具体实现:
场景1:检查传入数组的所有元素都存在于list2中
LINQ实现(无需手动循环)
如果项目引用了LINQ(.NET默认支持),可以用All方法快速实现,内部已封装循环逻辑:
// 假设list2是类内预设的列表 private List<string> list2 = new List<string> { "234", "345", "456" }; public bool IsValueInsideTheList(string[] list1) { return list1.All(item => list2.Contains(item)); }
手动循环实现
如果不想依赖LINQ,直接用foreach遍历判断:
private List<string> list2 = new List<string> { "234", "345", "456" }; public bool IsValueInsideTheList(string[] list1) { foreach (string item in list1) { if (!list2.Contains(item)) { return false; } } return true; }
场景2:检查传入数组中至少有一个元素存在于list2中
LINQ实现(无需手动循环)
用Any方法即可,逻辑更简洁:
private List<string> list2 = new List<string> { "234", "345", "456" }; public bool IsValueInsideTheList(string[] list1) { return list1.Any(item => list2.Contains(item)); }
手动循环实现
遍历过程中找到存在的元素就直接返回true:
private List<string> list2 = new List<string> { "234", "345", "456" }; public bool IsValueInsideTheList(string[] list1) { foreach (string item in list1) { if (list2.Contains(item)) { return true; } } return false; }
性能优化建议
如果list2的元素数量较多,List<string>.Contains的查询效率是O(n),可以提前把list2转换成HashSet<string>,让查询操作变成O(1):
// 初始化时转成HashSet,提升重复查询的性能 private HashSet<string> list2Set = new HashSet<string> { "234", "345", "456" }; public bool IsValueInsideTheList(string[] list1) { return list1.All(item => list2Set.Contains(item)); }
内容的提问来源于stack exchange,提问作者Kermi
相关产品推荐
相关产品推荐

