我有两个字符串数组
string[] a;
string[] b;
如何才能发现数组a中的元素序列与数组b类似?
当我使用.net2.0时,我无法使用LINQ。
修改
这就是我试过的
foreach (string val2 in a)
{
foreach (string val1 in b)
{
if (val1 == val2)
{
// Values are same - continue processing
}
else
{
// Value not same -- exit }
}
}
答案 0 :(得分:4)
private bool Compare(string[] a, string[] b)
{
if (a.Length != b.Length) return false;
for (int i = 0; i< a.Length; i++)
if (a[i] != b[i]) return false;
return true;
}
答案 1 :(得分:3)
我相信你想看看两个数组中的元素是否具有相同的值和相同的索引。你可以有一个简单的方法,如:
public static bool IsSequenceEqual(string[] a, string[] b)
{
if (a.Length != b.Length)
return false;
for (int i = 0; i < a.Length; i++)
{
if (a[i] != b[i])
return false;
}
return true;
}
答案 2 :(得分:0)
如果两个列表都已排序,您可以使用其他解决方案之一。但如果列表未分类,您可以执行以下操作。
Dictionary<string, byte> dict = new Dictionary<string, byte>();
foreach (string s in a)
{
dict.Add(s, 0);
}
bool same = true;
foreach (string s in b)
{
same &= dict.ContainsKey(s);
if (!same)
break;
}
在此之前你仍然可以进行简单的测试,例如检查等长等等。
如果你可以使用.NET 4.0,那就是数组的Intersect
方法。
然后,您可以执行a.Intersect(b)
并将长度与a
或b
的长度进行比较。如果那是true
则列表相等,因为两个数组的所有元素都相交。您可以使用a.Union(b)
执行类似的操作。
修改强> 按照phoog的建议使用Dictionary而不是ArrayList。
答案 3 :(得分:0)
/// <summary>
/// Compare two string array.
/// If both null - return true ;
/// If only one is null - return false ;
/// </summary>
bool IsSequenceEqual(string[] a, string[] b)
{
if (a == null && b == null) // both null - return true
return true;
if (a == null || b == null) // only one is null - return false
return false;
if (a.Length != b.Length) // length is different - return false
return false;
// check if equal
for (int i = 0; i < a.Length; i++)
{
if (a[i] != b[i])
return false;
}
return true;
}