csharp сравнивает списки<t> слева направо и справа налево

Из https://msdn.microsoft.com/en-us/library/mt693040.aspx списка строк можно сравнить с помощью приведенного ниже кода через linq. Есть ли встроенный способ для сравнения списка слева направо и справа налево?

class CompareLists
{        
    static void Main()
    {
        // Create the IEnumerable data sources.
        string[] names1 = System.IO.File.ReadAllLines(@"../../../names1.txt");
        string[] names2 = System.IO.File.ReadAllLines(@"../../../names2.txt");

        // Create the query. Note that method syntax must be used here.
        IEnumerable<string> differenceQuery =
          names1.Except(names2);

        // Execute the query.
        Console.WriteLine("The following lines are in names1.txt but not names2.txt");
        foreach (string s in differenceQuery)
            Console.WriteLine(s);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }
}

/ * Вывод: следующие строки находятся в names1.txt, но не names2.txt Потра, Кристина Норьега, Фабрицио Ау, Кам Фу Тойосима, Тим Гай, Вей Юань Гарсия, Дебра */

Примечание. Слева направо означает список источников для списка адресатов и наоборот.

2 ответа

Рассматривать Enumerable.Reverse:

string[] names1 = File.ReadAllLines(@"../../../names1.txt")
                      .Reverse()
                      .ToArray();

Или, возможно, будет более эффективным, чтобы отменить результат, как предложил @JianpingLiu:

IEnumerable<string> differenceQuery = names1.Except(names2).Reverse();

Вы имеете в виду, что вы хотите текст в names2 но не в names1? Если так, попробуйте names2.Except(names1)

Если вы ищете все, что находится вне пересечения имен names1 и names2, проверьте этот ответ . Противоположность Intersect()

Другие вопросы по тегам