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


Answers

आप SequenceEqual भी उपयोग कर सकते हैं, बशर्ते 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};

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




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

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

संक्षिप्त।




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



    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;
    }



मुझे here एक बहुत साफ तरीका होने के लिए विस्तृत समाधान मिला है, हालांकि कुछ लोगों के लिए थोड़ा वर्बोज़।

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




Links