可能重复:
Comparing Arrays in C#
我有两个字符串数组:
string[] a;
string[] b;
如何确定a
中不存在b
项的数量(和具体内容)?因为我使用.NET 2.0所以我不能使用linq。
答案 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>
然后
如何识别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)
只需枚举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();
}
答案 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;
}