Как сравнить массивы на равенство в C #? - PullRequest
2 голосов
/ 03 декабря 2010

В C ++, если вы хотите проверить, равны ли 2 массива (по содержанию), вы можете сделать:

#include <vector>
#include <cassert>

using namespace std;

int main (int argc, char * const argv[]) {

  vector<int> a;
  a.push_back(5); 
  a.push_back(6);
  a.push_back(7);

  vector<int> b = a;    // this copies array a's contents to array b

  assert( a == b );     // this compares the content of array a and b one element at a time

  return 0;
}

Как я могу добиться того же в C # без написания собственного цикла сравнения?

3 ссылки, которые я нашел до сих пор, хотя я не уверен, что они устарели:

Я новичок в C # и использую Mono.

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010
bool equals = array1.OrderBy(a => a).SequenceEqual(array2.OrderBy(a => a));

легкий путь

1 голос
/ 03 декабря 2010

вот эффективный метод расширения, который должен добиться цели

public static bool Compare<T>(this T[] source, T[] target, 
       Func<T,T,bool> comparer )
{
    if (source.Length != target.Length)
        return false;
    return !source.Where((t, i) => !comparer(t, target[i])).Any();
}

var a = new[] {2, 3, 4, 5, 6, 7, 8};
var b = new[] {2, 3, 4, 5, 6, 7, 8};
var c = new[] {2, 3, 4, 5, 6, 7, 8, 9};
var d = new[] {2, 4, 3, 5, 6, 8, 7};

var r1 = a.Compare(b, (i1, i2) => i1 == i2); // true
var r2 = a.Compare(c, (i1, i2) => i1 == i2); // false
var r3 = a.Compare(d, (i1, i2) => i1 == i2); // false
1 голос
/ 03 декабря 2010

я не уверен насчет MOno, поэтому я удалил свой предыдущий ответ

вы можете сделать это, просматривая / Stack реализацию, потому что операция push / Pop is O (1) и доступ к элементу в массиве такжеO (1) операция.

If (Arr1.Length != Arr2.Length)
{
    return false // not equals
}
else
  {
     Arr1.Sort(); // important as both array has to be sorted 
     Arr2.Sort() ;// important as both array has to be sorted 

      for(int i=0;i<Arr1.Length ; i++)
         {
           if(Arr[i]!=Arr1[i])
              break;
         }

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...