【发布时间】:2018-01-30 14:50:40
【问题描述】:
我想创建一个循环来检查重复的标题列表。
我目前有这个:
var productTitles = SeleniumContext.Driver.FindElements(By.XPath(ComparisonTableElements.ProductTitle));
foreach (var x in productTitles)
{
var title = x.Text;
productTitles = SeleniumContext.Driver.FindElements(By.XPath(ComparisonTableElements.ProductTitle));
foreach (var y in productTitles.Skip(productTitles.IndexOf(x) + 1))
{
if (title == y.Text)
{
Assert.Fail("Found duplicate product in the table");
}
}
}
但这是我从数组中跳过的项目以进行下一个循环,因此项目 2 从不检查它是否与项目 1 相同,它直接移动到项目 3。
我的印象是,skip 只是传递了您传入的索引,而不是从列表中删除它。
【问题讨论】:
-
我相信skip会跳过'N'个元素。因此,如果您想忽略第一个元素,那么您 Skip(1)... 等等。
-
GroupBy 将在一行中完成所有操作。如果可能的话,使用 Linq
-
我希望能够跳过第一个循环中的元素,这样它就不会对自己进行检查是否有意义。所以第 1 项检查除 1 之外的所有元素,第 2 项检查第 1、3、4、5 项等
-
跳过不删除..
-
使用 GroupBy 并过滤 where group.Count() > 1. Skip 从字面上跳过给定数量的记录。它不会跳过索引位置。而且,谁在乎呢,因为如果你按顺序比较每个项目,你永远不需要回溯。如果您检查 1 与 2,则无需重新检查 2 与 1。3、4 等也是如此。