Подтвердить что ты не робот

С# сравнение двух строковых массивов

Хорошо, так что это может быть основной вопрос, но я был бы признателен за ответ.

Скажем, у нас есть 5 строковых массивов:

string[] a = {"The","Big", "Ant"};
string[] b = {"Big","Ant","Ran"};
string[] c = {"The","Big","Ant"};
string[] d = {"No","Ants","Here"};
string[] e = {"The", "Big", "Ant", "Ran", "Too", "Far"};

Есть ли способ сравнить эти строки друг с другом, не зацикливая их на С#, чтобы только a и c приводили к логическому истинному? Другими словами, все элементы должны быть равными, а массив должен быть одного размера? Опять же, без использования петли, если это возможно. Спасибо заранее!

4b9b3361

Ответ 1

Вы можете использовать Linq:

bool areEqual = a.SequenceEqual(b);

Ответ 2

Попробуйте использовать Enumerable.SequenceEqual:

var equal = Enumerable.SequenceEqual(a, b);

Ответ 3

Если вы хотите сравнить их все за один раз:

string[] a = { "The", "Big", "Ant" };
string[] b = { "Big", "Ant", "Ran" };
string[] c = { "The", "Big", "Ant" };
string[] d = { "No", "Ants", "Here" };
string[] e = { "The", "Big", "Ant", "Ran", "Too", "Far" };

// Add the strings to an IEnumerable (just used List<T> here)
var strings = new List<string[]> { a, b, c, d, e };

// Find all string arrays which match the sequence in a list of string arrays
// that doesn't contain the original string array (by ref)
var eq = strings.Where(toCheck => 
                            strings.Where(x => x != toCheck)
                            .Any(y => y.SequenceEqual(toCheck))
                      );

Возвращает оба соответствия (вы, вероятно, могли бы расширить это, чтобы исключить элементы, которые уже совпадают, предположим)

Ответ 4

        if (a.Length == d.Length)
        {
            var result = a.Except(d).ToArray();
            if (result.Count() == 0)
            {
                Console.WriteLine("OK");
            }
            else
            {
                Console.WriteLine("NO");
            }
        }
        else
        {
            Console.WriteLine("NO");
        }