两个 List ,怎么判断 List A2全部元素都在 A1中有出现过,例如以下两个List,返回结果应该是 true

marklr 2017-11-03 01:52:22
不要用 foreach 或 for 等循环,用 select、any 、contain ........等语法
例如以下两个List,返回结果应该是 true

List<string> A1 = new List<string>() { "ACDP", "BB", "CatCC", "DD" };
List<string> A2= new List<string>() { "AC", "Cat" };

if (..........== true)
{
MessageBox.Show("List A2元素全部都在A1中出现");
}
...全文
250 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tei333 2017-11-03
  • 打赏
  • 举报
回复
guanyinsishengzi 2017-11-03
  • 打赏
  • 举报
回复
区分大小写的话就都去掉ToUpper()
guanyinsishengzi 2017-11-03
  • 打赏
  • 举报
回复
两层Any+两层All

bool result = !list2.Any(str1 => str1.ToUpper().Any(char1 => list1.All(str2 => str2.ToUpper().All(char2 => char1 != char2))))
exception92 2017-11-03
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
用contains 判断A1中是否包含A2,包含就返回true,根据返回true的数量 与A2集合的数量对比,大于等于A2的集合数量 说明都出现过。
用Intersect的话 需要提供一个实现了IEqualityComparer接口的比较类:类似:

 public class StrCompare : IEqualityComparer<string>
        {
            public bool Equals(string x, string y)
            {
                if (y.Contains(x))
                    return true;
                return false;
            }
            public int GetHashCode(string obj)
            {
                return 1;
            }
        }
A1.Intersect(A2, new StrCompare()); 最终还是要使用Contains判断。
exception92 2017-11-03
  • 打赏
  • 举报
回复
用contains 判断A1中是否包含A2,包含就返回true,根据返回true的数量 与A2集合的数量对比,大于等于A2的集合数量 说明都出现过。
zhujiazhi 2017-11-03
  • 打赏
  • 举报
回复
A2.Intersect(A1).Count() == A2.Count

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧