我有一个清单,其中每个项目都是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,但无法解决。
答案 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()));