C# 验证第二列是否为第一列重复项排序
我有两个行数相同的列,第一列是C# 验证第二列是否为第一列重复项排序,c#,list,selenium,sorting,C#,List,Selenium,Sorting,我有两个行数相同的列,第一列是FirstName,第二列是LastName。我通过对第一列进行升序排序来进行多重排序,然后根据第一列的重复项对第二列进行升序排序。如何验证同一索引的第1列第2列中存在重复项的位置是否正确排序,例如,请参见图 List firstName=新列表{“史蒂夫”、“约翰”、“鲍勃”、“鲍勃”、“鲍勃”}; List lastName=新列表{“约翰”、“布莱恩特”、“保罗”、“大卫”、“苹果”}; 请不要将单个实体(Name)拆分为多个集合(firstName,las
FirstName
,第二列是LastName
。我通过对第一列进行升序排序来进行多重排序,然后根据第一列的重复项对第二列进行升序排序。如何验证同一索引的第1列第2列中存在重复项的位置是否正确排序,例如,请参见图
List firstName=新列表{“史蒂夫”、“约翰”、“鲍勃”、“鲍勃”、“鲍勃”};
List lastName=新列表{“约翰”、“布莱恩特”、“保罗”、“大卫”、“苹果”};
请不要将单个实体(Name
)拆分为多个集合(firstName
,lastName
)
在LinqZip的帮助下,让我们将它们组合回单个名称
:
using System.Linq;
...
var names = firstName
.Zip(lastName, (first, last) => new {
first,
last
})
.OrderBy(name => name.first) // by first name ascending
.ThenBy(name => name.last) // in case of tie by last name ascending
.ToArray();
// Let's have a look:
Console.Write(string.Join(Environment.NewLine, names
.Select(name => $"{name.first} {name.last}")));
// If you insist on splitting names back to 2 lists:
firstName = names
.Select(name => name.first)
.ToList();
lastName = names
.Select(name => name.last)
.ToList();
编辑:实施了正确的订单(名称
),我们可以验证提供的订单:
// Orders to be tested
IEnumerable<string> firstNameUnderTest = ...
IEnumerable<string> lastNameUnderTest = ...
var counterExamples = names
.Zip(firstNameUnderTest, (name, fn) => new {name, fn})
.Zip(lastNameUnderTest, (item, ln) => new {
expectedFirst = item.name.first,
expectedLast = item.name.last,
actualFirst = item.fn,
actualLast = ln
})
.Where(item => item.expectedFirst != item.actualFirst ||
item.expectedLast != item.actualLast)
.Select(item => $"Expected: {item.expectedFirst}, {item.expectedLast}; " +
$"Actual: {item.actualFirst}, {item.actualLast}")
.ToArray();
您可以放置反例.Any()
来检查是否至少有一个失败的测试,反例.Count()
来计算失败的测试等等。您的答案对于找到一种将两列合并的好方法非常有帮助。但是,最初的问题是,如何验证第二列是否正确排序?而不是视觉测试验证。我想写逻辑我想声明所有的names.last都与names.first重复在同一位置,排序正确。例如,对于所有的名字,Bob验证姓氏是否已排序请不要发布代码的屏幕截图。复制并粘贴到你的问题中。到目前为止你做了哪些尝试?
// Orders to be tested
IEnumerable<string> firstNameUnderTest = ...
IEnumerable<string> lastNameUnderTest = ...
var counterExamples = names
.Zip(firstNameUnderTest, (name, fn) => new {name, fn})
.Zip(lastNameUnderTest, (item, ln) => new {
expectedFirst = item.name.first,
expectedLast = item.name.last,
actualFirst = item.fn,
actualLast = ln
})
.Where(item => item.expectedFirst != item.actualFirst ||
item.expectedLast != item.actualLast)
.Select(item => $"Expected: {item.expectedFirst}, {item.expectedLast}; " +
$"Actual: {item.actualFirst}, {item.actualLast}")
.ToArray();
Console.Write(string.Join(Environment.NewLine, counterExamples));