如何比较列表中的所有项目是否相等?

时间:2018-10-30 23:38:42

标签: c# linq

我有一个清单,其中每个项目都是st本身的清单。 如何检查所有单个项目是否相同?

static void Main(string[] args)
{
    var myList = new List<List<string>>();
    var myItem1 = new List<string> { "str1", "str2" };
    var myItem2 = new List<string> { "str1", "str2" };

    myList.Add(myItem1);
    myList.Add(myItem2);

    var total = ??  // <- I'm stuck here

    Console.WriteLine(total);
    Console.ReadKey();
}

现在,我要检查myList中的每个项目是否相等。 我确实尝试过以下一种方法:Check if two list have the same items,但无法解决。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用类似this的方法,如果列表的元素都相同,则应该输出true。

输入您的代码

if (myList.Any(item => !Enumerable.SequenceEqual(item, myList[0])))

答案 1 :(得分:0)

要检查所有列表中是否包含完全相同的元素,可以使用SequenceEqual方法,该方法比较元素本身及其顺序。但是,既然您说顺序无关紧要,那么在进行比较时,我们必须首先对列表进行排序。

如果true列表(除第一个列表之外)在缩减为All个项目然后排序(Distinct)时,以下代码返回OrderBy等于First列表(当缩减为Distinct个项目并排序时):

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()));