jar*_*rus 0 c# arrays comparison equality
我试图计算两个像myArray{a,b,c}和的数组urArray{a,b,c,c}
我想检查两个元素是否都有相同的元素,例如在上面的条件中,第二个数组urArray有一个额外的'c'.
如果代码具有相同的元素,则代码应该能够等同两组数组,并且元素的顺序无关紧要.只是两个数组都应该有相同的元素,即如果一个有两个'c',另一个也应该有两个'c',否则条件是假的.
所以我做的是:
char[] myArray = new char[] {'a','b','c','c'};
char[] urArray = new char[] { 'a', 'b', 'c' ,'a'};
List<char> tmp2 = new List<char>(urArray);
for (int i = 0; i < myArray.Length; ++i)
{
for (int j = 0; j < urArray.Length; ++j)
{
if (myArray[i] == urArray[j])
{
Console.WriteLine(urArray[j] + "--> " + "urArray"+" myArray"+"--> "+myArray[i]);
tmp2.Remove(urArray[j]);
urArray = tmp2.ToArray();
}
else if (myArray[i] != urArray[j])
{
Console.WriteLine(myArray[i] + "--> " + "myArray" + " urArray" + "--> " + urArray[j]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但不知道如何表明如果数组有相同的元素......
我怎么能做到这一点?
这里有一些C#代码使用linq来完成这项工作,它基本上是排序/比较序列形式的实现 - 这是最可靠的.此代码将对两个序列进行排序并比较等效性.您可以稍微优化它,首先检查它myArray并且urArray长度相同,以避免不必要的排序.
char[] myArray = new char[] {'a','b','c','c'};
char[] urArray = new char[] { 'a', 'b', 'c' ,'a'};
var areEqual = myArray.OrderBy( x => x )
.SequenceEqual( urArray.OrderBy( x => x ) );
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因你不能(或者不想)使用linq,这里是使用.NET 2.0代码的等效版本:
public static bool AreEquivalentArray( char[] a, char[] b )
{
if (a.Length != b.Length)
return false;
Array.Sort(a);
Array.Sort(b);
for (int i = 0; i < a.Length; i++)
{
if( !a[i].Equals( b[i] ) )
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)