可能重复:
比较 C# 中的数组
我有两个字符串数组:
string[] a;
string[] b;
我如何确定有多少(以及哪些)项目a
不存在b
?因为我使用的是 .NET 2.0,所以我不能使用 linq。
可能重复:
比较 C# 中的数组
我有两个字符串数组:
string[] a;
string[] b;
我如何确定有多少(以及哪些)项目a
不存在b
?因为我使用的是 .NET 2.0,所以我不能使用 linq。
List<string> result = new List<string>();
foreach (string sa in a)
{
if (Array.IndexOf(b, sa) < 0)
result.Add(sa);
}
int count = result.Count;
将它们都转换为 List 并执行以下操作:
List<string> difference = new List<string>();
foreach(string word in a)
{
if(!b.Contains(word))
difference.Add(word);
}
我建议将您的字符串数组转换为HashSet<T>
s.
请参阅此处了解如何HashSet<T>
在 .NET 2.0中使用
然后
如何确定 b 中不存在 a 的多少(以及哪些)项目?
--> IntersectWith正是这样做的。
试试这个:
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);
}
您需要做的是将一个列表中的项目存储在一个集合中,然后从该集合中删除所有项目(如果它们在另一个集合中)。对于较大的数据集,这将比两个嵌套循环或在其中一个数组上执行大量线性搜索要快得多。
由于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'
}
只需枚举 和 中的项目a
,b
就像过去一样:
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();
}
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;
}