比较链接列表c#

时间:2015-03-19 18:22:15

标签: c# list linked-list compare

我在比较两个链接列表时遇到问题,我有两个参数列表list1包含{1,2,3,4,5}list2包含{1,3,4,5,6}

我没有使用linkedlistnodes作为开始,这就是为什么我在这里问这个问题,我确实尝试切换到笔记,但是我的很多其他工作必须重新编写以使其工作我真的不想做。

无论如何这里是我的代码到目前为止,我试图使用2个循环来循环和比较每个值。问题在于它没有按照我的预期方式工作,因为我没有想到它会在继续之前将list1的第一个值与list2中的所有值进行比较。它让我难以理解如何使这个工作,或者我是否以正确的方式解决这个问题。

bool c = false;
foreach (int s in list1) {
    foreach (int t in list2)
        if (s == t) {
            c = true;
            //The console write line in this part of the code is for testing
            Console.WriteLine("Both Lists Match  {0}, {1}", s, t);
            break;
        } else {
            c = false;
            //The console write line in this part of the code is for testing
            Console.WriteLine("Not a Match {0}, {1}", s, t);
        }
}

if (c == true) {
   Console.WriteLine("Both Lists Match");
} else {
    Console.WriteLine("Not a Match");
}

1 个答案:

答案 0 :(得分:4)

您表示"我只是想测试list1的所有元素是否都在list2"。

这可以使用两个嵌套循环来解决,您可以在这里比较列表中的元素,因为您正在尝试使用您的问题发布的代码,但是发布的代码存在一些问题。

就方法而言,考虑此问题的最简单方法可能是:

  1. 假设list2包含list1
  2. 中的所有元素
  3. s中的每个元素list1t
  4. 中的元素list2进行比较
  5. 如果s != t,对于t中的每个list2,您知道假设不正确,您可以停止搜索。
  6. 您可以通过以下方式解决此问题(对现有代码进行最少的更改):

        bool c = true; // assume each 's' is in 'list2'
        foreach (int s in list1)
        {
            bool contains_s = false; // 's' in 'list2' ?
            foreach (int t in list2)
            {
                if (s == t)
                {
                    // found 's' in 'list2'.
                    contains_s = true;
                    //The console write line in this part of the code is for testing
                    Console.WriteLine("Both Lists Match  {0}, {1}", s, t);
                    break; // breaks out of the inner loop.
                }
            }
            if (!contains_s) // if 's' not found we are done.
            {
                c = false;
                break; // breaks out of the outer loop
            }
        }
    
        if (c == true)
        {
            Console.WriteLine("Both Lists Match");
        }
        else
        {
            Console.WriteLine("Not a Match");
        }
    

    如果你正在使用LINQ,你可以用一个更简单的语句替换它,它基本上与上面的循环相同。

    var doesNotContainAllElements = list1.Any(s => !list2.Contains(s));
    

    var containsAllElements = list1.All(s => list2.Contains(s));