[C#] सी # में सरणियों की समानता का परीक्षण करना


Answers

आप अनुक्रमांक भी उपयोग कर सकते हैं, बशर्ते IEnumerable वस्तुओं को पहले सॉर्ट किया गया है।

int[] a1 = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };    
int[] a2 = new[] { 9, 1, 4, 5, 2, 3, 6, 7, 8 };    

bool equals = a1.OrderBy(a => a).SequenceEqual(a2.OrderBy(a => a));
Question

मेरे पास दो सरणी हैं उदाहरण के लिए:

int[] Array1 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] Array2 = new[] {9, 1, 4, 5, 2, 3, 6, 7, 8};

यह निर्धारित करने का सबसे अच्छा तरीका क्या है कि क्या उनके पास समान तत्व हैं?




मुझे यहां समाधान का पता चला है जो एक बहुत ही स्वच्छ तरीके से किया गया है, हालांकि कुछ लोगों के लिए एक बिट वर्बोज़ है

सबसे अच्छी बात यह है कि यह अन्य IEnumerables के लिए भी काम करता है




    public static bool ValueEquals(Array array1, Array array2)
    {
        if( array1 == null && array2 == null )
        {
            return true;
        }

        if( (array1 == null) || (array2 == null) )
        {
            return false;
        }

        if( array1.Length != array2.Length )
        {
            return false;
        }
        if( array1.Equals(array2))
        {
           return true;
        }
        else
        {
            for (int Index = 0; Index < array1.Length; Index++)
            {
                if( !Equals(array1.GetValue(Index), array2.GetValue(Index)) )
                {
                    return false;
                }
            }
        }
        return true;
    }



var shared = arr1.Intersect(arr2);
bool equals = arr1.Length == arr2.Length && shared.Count() == arr1.Length;



विस्तार विधियों का उपयोग करें (जो 3.0 में नया है) यदि दो सरणियों के छल्ले की लंबाई उसके संघ के बराबर होती है तो सरणियां समान होती हैं।

bool equals = arrayA.Intersect(arrayB).Count() == arrayA.Union(arrayB).Count()

संक्षिप्त।