我在比较两个链接列表时遇到问题,我有两个参数列表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");
}
答案 0 :(得分:4)
您表示"我只是想测试list1
的所有元素是否都在list2
"。
这可以使用两个嵌套循环来解决,您可以在这里比较列表中的元素,因为您正在尝试使用您的问题发布的代码,但是发布的代码存在一些问题。
就方法而言,考虑此问题的最简单方法可能是:
list2
包含list1
s
中的每个元素list1
与t
list2
进行比较
s != t
,对于t
中的每个list2
,您知道假设不正确,您可以停止搜索。您可以通过以下方式解决此问题(对现有代码进行最少的更改):
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));