比较链表 c#
Comparing linkedlists c#
我在比较两个链表时遇到问题,为了参数我有 2 个列表 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");
}
您表示 "i am simply trying to test if all elements of list1
are in list2
"。
这可以使用两个嵌套循环来解决,您可以在其中比较列表的元素,因为您正在尝试使用您随问题发布的代码,但是发布的代码存在一些问题。
就方法而言,思考这个问题的最简单方法可能是:
- 假设
list2
包含来自 list1
的所有元素
- 将
list1
中的每个元素 s
与 list2
中的元素 t
进行比较
- 如果
s != t
,对于 list2
中的每个 t
,您知道假设不正确,您可以停止搜索。
您可以通过以下方式解决此问题(对现有代码进行最少的更改):
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));
我在比较两个链表时遇到问题,为了参数我有 2 个列表 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");
}
您表示 "i am simply trying to test if all elements of list1
are in list2
"。
这可以使用两个嵌套循环来解决,您可以在其中比较列表的元素,因为您正在尝试使用您随问题发布的代码,但是发布的代码存在一些问题。
就方法而言,思考这个问题的最简单方法可能是:
- 假设
list2
包含来自list1
的所有元素
- 将
list1
中的每个元素s
与list2
中的元素t
进行比较 - 如果
s != t
,对于list2
中的每个t
,您知道假设不正确,您可以停止搜索。
您可以通过以下方式解决此问题(对现有代码进行最少的更改):
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));