如何将两个数组的元素等同,而不管条目的顺序如何

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)

但不知道如何表明如果数组有相同的元素......

我怎么能做到这一点?

LBu*_*kin 7

这里有一些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)