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

在Linq
Zip的帮助下,让我们将它们组合回单个
名称

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