比较两个字符串数组而不使用linq

时间:2012-08-23 15:58:06

标签: c# .net-2.0 arrays

  

可能重复:
  Comparing Arrays in C#

我有两个字符串数组:

string[] a;
string[] b;

如何确定a中不存在b项的数量(和具体内容)?因为我使用.NET 2.0所以我不能使用linq。

7 个答案:

答案 0 :(得分:2)

List<string> result = new List<string>();
foreach (string sa in a)
{
   if (Array.IndexOf(b, sa) < 0)
      result.Add(sa);
}

int count = result.Count;

答案 1 :(得分:1)

将它们转换为List,执行以下操作:

List<string> difference = new List<string>();
foreach(string word in a)
{
    if(!b.Contains(word))
        difference.Add(word);
}

答案 2 :(得分:1)

我建议将你的字符串数组转换为HashSet<T> s 有关如何在.NET 2.0中使用HashSet<T>

,请参阅here

然后

  

如何识别a中有多少(和哪些)项目   B'

- &GT; IntersectWith正是这样做的。

答案 3 :(得分:1)

试试这个:

string[] a = ...;
string[] b = ...;

List<string> bList = new List<string>(b);
List<string> valuesInAButNotInB = new List<string>();
foreach (string value in a)
{
    if (!bList.Contains(value))
        valuesInAButNotInB.Add(value);
}

答案 4 :(得分:1)

您需要做的是将一个列表中的项目存储在一个集合中,然后删除该集合中的所有项目(如果它们位于另一个集合中)。对于大型数据集而言,这比两个嵌套循环要快得多,或者在其中一个阵列上执行大量线性搜索。

由于2.0中不存在HashSet,我只使用Dictionary并忽略这些值。这是一个黑客,但并不是一个可怕的。

string[] a = null;
string[] b = null;
Dictionary<string, string> values = new Dictionary<string, string>();
foreach (string s in a)
{
    values.Add(s, s);
}

foreach (string s in b)
{
    values.Remove(s);
}

foreach (string s in values.Keys)
{
    Console.WriteLine(s);//This string is in 'a' and not in 'b'
}

答案 5 :(得分:0)

只需枚举ab中的项目,就像过去一样:

private static void Main(string[] args)
{
    string[] a = new string[] { "a", "b", "c", "d" };
    string[] b = new string[] { "c", "d" };

    foreach (string tmp in a)
    {
        bool existsInB = false;
        foreach (string tmp2 in b)
        {
            if (tmp == tmp2)
            {
                existsInB = true;
                break;
            }
        }

        if (!existsInB)
        {
            Console.WriteLine(string.Format("{0} is not in b", tmp));
        }
    }

    Console.ReadLine();
}

答案 6 :(得分:-1)

private List<string> CompareArray(string[]  arr1, string[] arr2)
{
        List<string> compareList = new List<string>();
        //iterate throught it
        foreach( string str in arr1 )
        {
            if(!arr2.Contains( str ))
            {
                compareList.Add(str);
            }
        }
            return compareList;
 }