Пожалуйста, не разбивайте одну сущность (Name
) на несколько коллекций (firstName
, lastName
).
Давайте объединяем их обратно в один names
с помощью 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();
Редактировать: Выполнив правильный заказ (names
), мы можем проверить предоставленных заказов:
// 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();
Давайте посмотрим на counterExamples
:
Console.Write(string.Join(Environment.NewLine, counterExamples));
Вы можете указать counterExamples.Any()
, чтобы проверить, есть ли хотя бы один неудачный тест, counterExamples.Count()
, чтобы подсчитать неудачные тесты и т.д. c.