-2

可能重复:
比较 C# 中的数组

我有两个字符串数组:

string[] a;
string[] b;

我如何确定有多少(以及哪些)项目a不存在b?因为我使用的是 .NET 2.0,所以我不能使用 linq。

4

7 回答 7

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;
于 2012-08-23T16:02:06.393 回答
1

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

List<string> difference = new List<string>();
foreach(string word in a)
{
    if(!b.Contains(word))
        difference.Add(word);
}
于 2012-08-23T16:05:01.893 回答
1

我建议将您的字符串数组转换为HashSet<T>s.
请参阅此处了解如何HashSet<T>在 .NET 2.0中使用

然后

如何确定 b 中不存在 a 的多少(以及哪些)项目?

--> IntersectWith正是这样做的。

于 2012-08-23T16:08:22.773 回答
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);
}
于 2012-08-23T16:10:41.850 回答
1

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

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

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'
}
于 2012-08-23T16:14:35.467 回答
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();
}
于 2012-08-23T16:04:34.073 回答
-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;
 }
于 2012-08-23T16:03:38.133 回答