比较列表<;字符串>;并实现所需的控制

本文关键字:控制 实现 gt 列表 lt 字符串 比较 | 更新日期: 2023-09-27 18:09:39

我有两个list<string>,如下

listA具有以下值10,20,30,40

listB具有以下值10,20,30

如果listB包含listA元素,我希望启用特定控件,如果不包含,我希望禁用控件

我试着使用如下两个循环

for(int ilist1=0;ilist1<listA.count;ilist1++)
{
  for(int ilist2=0;ilist2<listB.count;ilist2++)
  {
      if(listA[ilist1]==listB[ilist2])
      {
           //Enable particular control
      }
  }
}

但我知道这不是一个合适的方法,所以有人能告诉我实现的最佳方法吗

比较列表<;字符串>;并实现所需的控制

您要做的是将第一个列表中的项目散列到一个集合中,然后验证第二个列表中每个项目是否在集合中。不幸的是,HashSet<>不可用,所以你能得到的最接近的是Dictionary<,>

这样做:

Dictionary<string, string> set = new Dictionary<string, string>();
foreach (string item in listA)
{
    set.Add(item, item);
}
foreach (string item in listB)
{
    if (!set.ContainsKey(item))
    {
        //Enable particular control
    }
}

使用Intersect方法很容易:

    if (listB.Intersect(listA).Count() > 0)
    {
        //enable Control
    }
    else
    {
        //disable control
    }

我想你正在寻找类似的东西

List<string> lista = new List<string>() {"10","40","30" };
List<string> listb = new List<string>() { "10", "20" };
var diff = listb.Except<string>(lista);

diff应该给你那些不匹配的,否则所有的都会匹配。

对于2.0

if (listb.TrueForAll(delegate(string s2) { return lista.Contains(s2); }))
                MessageBox.Show("All Matched");
            else
                MessageBox.Show("Not Matched");

在fx 2.0中,您可以这样做:

    string b = listA.Find(delegate(string a) { return listB.Contains(a); });
    if (string.IsNullOrEmpty(b))
    {
        //disable control
    }
    else
    {
        //enable control
    }
Control.Enabled = listB.Intersect(listA).Any()

请注意,Any((只会检查是否至少有一项。当您只需要检查是否至少有一个项目时,Count((>0将评估整个集合

编辑:如果您在。NET 2.0环境中,然后您可以循环并执行以下操作:

foreach (int item in listB)
{
    if (listA.Contains(item))
       return true;
}
return false;