如何比较列表中的所有项是否相等?
如何比较列表中的所有项是否相等?
我有一个列表,其中每个项目本身都是一个字符串列表。\n如何检查所有单个项目是否相同?\n
static void Main(string[] args) { var myList = new List>(); var myItem1 = new List
{ "str1", "str2" }; var myItem2 = new List { "str1", "str2" }; myList.Add(myItem1); myList.Add(myItem2); var total = ?? // <- 我在这里卡住了 Console.WriteLine(total); Console.ReadKey(); }
\n现在我想检查myList中的每个项目是否相等。\n我尝试了这个:Check if two list have the same items,但无法解决。
如何比较列表中的所有项目是否相等?
要检查所有列表是否包含完全相同的元素,我们可以使用SequenceEqual方法,该方法比较元素本身及其顺序。然而,由于您说顺序无关紧要,因此在进行比较时,我们必须首先对列表进行排序。
以下代码行在将所有列表(第一个列表除外)简化为不同的项目并排序(OrderBy)后,与将第一个列表(简化为不同的项目并排序)进行比较时,返回true:
bool allAreEqual = myList .Skip(1) .All(subList => subList .Distinct() .OrderBy(item => item) .SequenceEqual(myList.First().Distinct().OrderBy(item => item)));
相比于一行代码完成所有操作,将获取不同的、排序的列表,然后进行比较会更易于阅读(个人意见)并且性能更好(否则我们将对每个其他列表的第一项进行排序):
var sortedLists = myList.Select(list => list.Distinct().OrderBy(item => item)); var allAreEqual = sortedLists.Skip(1).All(list => list.SequenceEqual(sortedLists.First()));
这样,我们可以先对列表进行处理,然后再进行比较。
如何比较列表中的所有项目是否相等?
有时我们需要比较一个列表中的所有项目是否相等。这可能是因为我们想要确定列表中的所有元素是否都具有相同的值,或者我们想要检查列表是否为空。无论出于何种原因,我们需要找到一种方法来解决这个问题。
在这种情况下,我们可以尝试像这样的方法,如果列表的元素都相同,它应该输出true。
对于你的代码:
if (myList.Any(item => !Enumerable.SequenceEqual(item, myList[0])))
这段代码使用了LINQ库中的`Any`和`SequenceEqual`方法。`Any`方法用于确定列表中是否有任何元素满足指定的条件。`SequenceEqual`方法用于比较两个序列是否相等。
在这段代码中,我们使用`Any`方法来检查列表中是否有任何元素与第一个元素不相同。如果有任何一个元素不相同,那么这个条件会返回true,否则返回false。
通过这种方法,我们可以很容易地比较列表中的所有项目是否相等。我们只需要使用`Any`方法和`SequenceEqual`方法来检查是否有任何一个元素与第一个元素不相同。如果列表中的所有元素都相同,那么这个条件将返回false,否则返回true。
这种方法非常简单且有效,可以帮助我们解决比较列表中所有项目是否相等的问题。无论我们是想要检查列表中的所有元素是否具有相同的值,还是想要确定列表是否为空,这种方法都可以很好地满足我们的需求。